2076 lines
		
	
	
		
			115 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			2076 lines
		
	
	
		
			115 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <!DOCTYPE html>
 | |
| <html><head>
 | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0">
 | |
| <meta http-equiv="content-type" content="text/html; charset=UTF-8">
 | |
| <link href="sqlite.css" rel="stylesheet">
 | |
| <title>Pragma statements supported by SQLite</title>
 | |
| <!-- path= -->
 | |
| </head>
 | |
| <body>
 | |
| <div class=nosearch>
 | |
| <a href="index.html">
 | |
| <img class="logo" src="images/sqlite370_banner.gif" alt="SQLite" border="0">
 | |
| </a>
 | |
| <div><!-- IE hack to prevent disappearing logo --></div>
 | |
| <div class="tagline desktoponly">
 | |
| Small. Fast. Reliable.<br>Choose any three.
 | |
| </div>
 | |
| <div class="menu mainmenu">
 | |
| <ul>
 | |
| <li><a href="index.html">Home</a>
 | |
| <li class='mobileonly'><a href="javascript:void(0)" onclick='toggle_div("submenu")'>Menu</a>
 | |
| <li class='wideonly'><a href='about.html'>About</a>
 | |
| <li class='desktoponly'><a href="docs.html">Documentation</a>
 | |
| <li class='desktoponly'><a href="download.html">Download</a>
 | |
| <li class='wideonly'><a href='copyright.html'>License</a>
 | |
| <li class='desktoponly'><a href="support.html">Support</a>
 | |
| <li class='desktoponly'><a href="prosupport.html">Purchase</a>
 | |
| <li class='search' id='search_menubutton'>
 | |
| <a href="javascript:void(0)" onclick='toggle_search()'>Search</a>
 | |
| </ul>
 | |
| </div>
 | |
| <div class="menu submenu" id="submenu">
 | |
| <ul>
 | |
| <li><a href='about.html'>About</a>
 | |
| <li><a href='docs.html'>Documentation</a>
 | |
| <li><a href='download.html'>Download</a>
 | |
| <li><a href='support.html'>Support</a>
 | |
| <li><a href='prosupport.html'>Purchase</a>
 | |
| </ul>
 | |
| </div>
 | |
| <div class="searchmenu" id="searchmenu">
 | |
| <form method="GET" action="search">
 | |
| <select name="s" id="searchtype">
 | |
| <option value="d">Search Documentation</option>
 | |
| <option value="c">Search Changelog</option>
 | |
| </select>
 | |
| <input type="text" name="q" id="searchbox" value="">
 | |
| <input type="submit" value="Go">
 | |
| </form>
 | |
| </div>
 | |
| </div>
 | |
| <script>
 | |
| function toggle_div(nm) {
 | |
| var w = document.getElementById(nm);
 | |
| if( w.style.display=="block" ){
 | |
| w.style.display = "none";
 | |
| }else{
 | |
| w.style.display = "block";
 | |
| }
 | |
| }
 | |
| function toggle_search() {
 | |
| var w = document.getElementById("searchmenu");
 | |
| if( w.style.display=="block" ){
 | |
| w.style.display = "none";
 | |
| } else {
 | |
| w.style.display = "block";
 | |
| setTimeout(function(){
 | |
| document.getElementById("searchbox").focus()
 | |
| }, 30);
 | |
| }
 | |
| }
 | |
| function div_off(nm){document.getElementById(nm).style.display="none";}
 | |
| window.onbeforeunload = function(e){div_off("submenu");}
 | |
| /* Disable the Search feature if we are not operating from CGI, since */
 | |
| /* Search is accomplished using CGI and will not work without it. */
 | |
| if( !location.origin || !location.origin.match || !location.origin.match(/http/) ){
 | |
| document.getElementById("search_menubutton").style.display = "none";
 | |
| }
 | |
| /* Used by the Hide/Show button beside syntax diagrams, to toggle the */
 | |
| function hideorshow(btn,obj){
 | |
| var x = document.getElementById(obj);
 | |
| var b = document.getElementById(btn);
 | |
| if( x.style.display!='none' ){
 | |
| x.style.display = 'none';
 | |
| b.innerHTML='show';
 | |
| }else{
 | |
| x.style.display = '';
 | |
| b.innerHTML='hide';
 | |
| }
 | |
| return false;
 | |
| }
 | |
| </script>
 | |
| </div>
 | |
| 
 | |
| <h1 align="center">PRAGMA Statements</h1>
 | |
| 
 | |
| 
 | |
| 
 | |
| <p>The PRAGMA statement is an SQL extension specific to SQLite and used to 
 | |
| modify the operation of the SQLite library or to query the SQLite library for 
 | |
| internal (non-table) data. The PRAGMA statement is issued using the same
 | |
| interface as other SQLite commands (e.g. <a href="lang_select.html">SELECT</a>, <a href="lang_insert.html">INSERT</a>) but is
 | |
| different in the following important respects:
 | |
| </p>
 | |
| <ul>
 | |
| <li>The pragma command is specific to SQLite and is
 | |
|     not compatible with any other SQL database engine.
 | |
| <li>Specific pragma statements may be removed and others added in future
 | |
|     releases of SQLite. There is no guarantee of backwards compatibility.
 | |
| <li>No error messages are generated if an unknown pragma is issued.
 | |
|     Unknown pragmas are simply ignored. This means if there is a typo in 
 | |
|     a pragma statement the library does not inform the user of the fact.
 | |
| <li>Some pragmas take effect during the SQL compilation stage, not the
 | |
|     execution stage. This means if using the C-language <a href="c3ref/prepare.html">sqlite3_prepare()</a>, 
 | |
|     <a href="c3ref/step.html">sqlite3_step()</a>, <a href="c3ref/finalize.html">sqlite3_finalize()</a> API (or similar in a wrapper 
 | |
|     interface), the pragma may run during the <a href="c3ref/prepare.html">sqlite3_prepare()</a> call,
 | |
|     not during the <a href="c3ref/step.html">sqlite3_step()</a> call as normal SQL statements do.
 | |
|     Or the pragma might run during sqlite3_step() just like normal
 | |
|     SQL statements.  Whether or not the pragma runs during sqlite3_prepare()
 | |
|     or sqlite3_step() depends on the pragma and on the specific release
 | |
|     of SQLite.
 | |
| <li>The <a href="lang_explain.html">EXPLAIN</a> and <a href="eqp.html">EXPLAIN QUERY PLAN</a> prefixes to SQL statements
 | |
|     only affect the behavior of the statement during <a href="c3ref/step.html">sqlite3_step()</a>.
 | |
|     That means that PRAGMA statements that take effect during
 | |
|     <a href="c3ref/prepare.html">sqlite3_prepare()</a> will behave the same way regardless of whether or
 | |
|     not they are prefaced by "EXPLAIN".
 | |
| </ul>
 | |
| 
 | |
| <p>The C-language API for SQLite provides the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a>
 | |
| <a href="c3ref/file_control.html">file control</a> which gives <a href="vfs.html">VFS</a> implementations the
 | |
| opportunity to add new PRAGMA statements or to override the meaning of
 | |
| built-in PRAGMA statements.</p>
 | |
| 
 | |
| 
 | |
| <hr /><a name="syntax"></a>
 | |
| <h2>PRAGMA command syntax</h2>
 | |
| <p><b><a href="syntax/pragma-stmt.html">pragma-stmt:</a></b>
 | |
| <button id='x2231' onclick='hideorshow("x2231","x2232")'>hide</button></p>
 | |
|  <div id='x2232' class='imgcontainer'>
 | |
|  <img alt="syntax diagram pragma-stmt" src="images/syntax/pragma-stmt.gif" />
 | |
| <p><b><a href="syntax/pragma-value.html">pragma-value:</a></b>
 | |
| <button id='x2233' onclick='hideorshow("x2233","x2234")'>hide</button></p>
 | |
|  <div id='x2234' class='imgcontainer'>
 | |
|  <img alt="syntax diagram pragma-value" src="images/syntax/pragma-value.gif" />
 | |
| <p><b><a href="syntax/signed-number.html">signed-number:</a></b>
 | |
| <button id='x2235' onclick='hideorshow("x2235","x2236")'>show</button></p>
 | |
|  <div id='x2236' style='display:none;' class='imgcontainer'>
 | |
|  <img alt="syntax diagram signed-number" src="images/syntax/signed-number.gif" />
 | |
| </div>
 | |
| </div>
 | |
| </div>
 | |
| 
 | |
| 
 | |
| <p>
 | |
| A pragma can take either zero or one argument.  The argument is may be either
 | |
| in parentheses or it may be separated from the pragma name by an equal sign.
 | |
| The two syntaxes yield identical results.
 | |
| In many pragmas, the argument is a boolean.  The boolean can be one of:
 | |
| </p>
 | |
| 
 | |
| <center>
 | |
| <b>1 yes true on<br>0 no false off</b>
 | |
| </center>
 | |
| 
 | |
| <p>Keyword arguments can optionally appear in quotes.  
 | |
| (Example:  <tt>'yes' [FALSE]</tt>.) Some pragmas
 | |
| takes a string literal as their argument.  When pragma takes a keyword
 | |
| argument, it will usually also take a numeric equivalent as well.
 | |
| For example, "0" and "no" mean the same thing, as does "1" and "yes".
 | |
| When querying the value of a setting, many pragmas return the number
 | |
| rather than the keyword.</p>
 | |
| 
 | |
| <p>A pragma may have an optional <span class='yyterm'>schema-name</span>
 | |
| before the pragma name.
 | |
| The <span class='yyterm'>schema-name</span> is the name of an <a href="lang_attach.html">ATTACH</a>-ed database 
 | |
| or "main" or "temp" for the main and the TEMP databases.  If the optional
 | |
| schema name is omitted, "main" is assumed.  In some pragmas, the schema
 | |
| name is meaningless and is simply ignored.  In the documentation below,
 | |
| pragmas for which the schema name is meaningful are shown with a
 | |
| "<i>schema.</i>" prefix.</p>
 | |
| 
 | |
| 
 | |
| <hr /><a name="pragfunc"></a>
 | |
| <h2>PRAGMA functions</h2>
 | |
| 
 | |
| 
 | |
| <p>
 | |
| PRAGMAs that return results and that have no side-effects can be 
 | |
| accessed from ordinary <a href="lang_select.html">SELECT</a> statements as <a href="vtab.html#tabfunc2">table-valued functions</a>.
 | |
| For each participating PRAGMA, the corresponding table-valued function
 | |
| has the same name as the PRAGMA with a 7-character "pragma_" prefix.
 | |
| The PRAGMA argument and schema, if any, are passed as arguments to
 | |
| the table-valued function.
 | |
| 
 | |
| <p>For example, information about the columns in an index can be
 | |
| read using the <a href="pragma.html#pragma_index_info">index_info pragma</a> as follows:
 | |
| 
 | |
| <blockquote><pre>
 | |
| PRAGMA index_info('idx52');
 | |
| </pre></blockquote>
 | |
| 
 | |
| <p>Or, the same content can be read using:
 | |
| 
 | |
| <blockquote><pre>
 | |
| SELECT * FROM pragma_index_info('idx52');
 | |
| </pre></blockquote>
 | |
| 
 | |
| <p>The advantage of the table-valued function format is that the query
 | |
| can return just a subset of the PRAGMA columns, can include a WHERE clause,
 | |
| can use aggregate functions, and the table-valued function can be just
 | |
| one of several data sources in a join.
 | |
| For example, to get a list of all indexed columns in a schema, one
 | |
| could query:
 | |
| 
 | |
| <blockquote><pre>
 | |
| SELECT DISTINCT m.name || '.' || ii.name AS 'indexed-columns'
 | |
|   FROM sqlite_schema AS m,
 | |
|        pragma_index_list(m.name) AS il,
 | |
|        pragma_index_info(il.name) AS ii
 | |
|  WHERE m.type='table'
 | |
|  ORDER BY 1;
 | |
| </pre></blockquote>
 | |
| 
 | |
| <p>
 | |
| Additional notes:
 | |
| <ul>
 | |
| <li><p>
 | |
| Table-valued functions exist only for built-in PRAGMAs, not for PRAGMAs
 | |
| defined using the <a href="c3ref/c_fcntl_begin_atomic_write.html#sqlitefcntlpragma">SQLITE_FCNTL_PRAGMA</a> file control.
 | |
| <li><p>
 | |
| Table-valued functions exist only for PRAGMAs that return results and
 | |
| that have no side-effects.
 | |
| <li><p>
 | |
| This feature could be used to implement
 | |
| <a href="https://en.wikipedia.org/wiki/Information_schema">information schema</a>
 | |
| by first creating a separate schema using
 | |
| <blockquote><pre>
 | |
| <a href="lang_attach.html">ATTACH</a> ':memory:' AS 'information_schema';
 | |
| </pre></blockquote>
 | |
| Then creating
 | |
| <a href="lang_createview.html">VIEWs</a> in that schema that implement the official information schema
 | |
| tables using table-valued PRAGMA functions.
 | |
| <li><p>
 | |
| This feature is experimental and is subject to change.  Further documentation
 | |
| will become available if and when the table-valued functions for PRAGMAs
 | |
| feature becomes officially supported.
 | |
| <li><p>
 | |
| The table-valued functions for PRAGMA feature was added
 | |
| in SQLite version 3.16.0 (2017-01-02).  Prior versions of SQLite
 | |
| cannot use this feature.
 | |
| </ul>
 | |
| 
 | |
| <hr /><a name="toc"></a>
 | |
| <h2>List Of PRAGMAs</h2>
 | |
| <div class='columns' style='columns: 12em auto;'>
 | |
| <ul style='padding-top:0;'>
 | |
| <li><a href='pragma.html#pragma_analysis_limit'>analysis_limit</a></li>
 | |
| <li><a href='pragma.html#pragma_application_id'>application_id</a></li>
 | |
| <li><a href='pragma.html#pragma_auto_vacuum'>auto_vacuum</a></li>
 | |
| <li><a href='pragma.html#pragma_automatic_index'>automatic_index</a></li>
 | |
| <li><a href='pragma.html#pragma_busy_timeout'>busy_timeout</a></li>
 | |
| <li><a href='pragma.html#pragma_cache_size'>cache_size</a></li>
 | |
| <li><a href='pragma.html#pragma_cache_spill'>cache_spill</a></li>
 | |
| <li><a href='pragma.html#pragma_case_sensitive_like'>case_sensitive_like</a></li>
 | |
| <li><a href='pragma.html#pragma_cell_size_check'>cell_size_check</a></li>
 | |
| <li><a href='pragma.html#pragma_checkpoint_fullfsync'>checkpoint_fullfsync</a></li>
 | |
| <li><a href='pragma.html#pragma_collation_list'>collation_list</a></li>
 | |
| <li><a href='pragma.html#pragma_compile_options'>compile_options</a></li>
 | |
| <li><a href='pragma.html#pragma_count_changes'><s>count_changes¹</s></a></li>
 | |
| <li><a href='pragma.html#pragma_data_store_directory'><s>data_store_directory¹</s></a></li>
 | |
| <li><a href='pragma.html#pragma_data_version'>data_version</a></li>
 | |
| <li><a href='pragma.html#pragma_database_list'>database_list</a></li>
 | |
| <li><a href='pragma.html#pragma_default_cache_size'><s>default_cache_size¹</s></a></li>
 | |
| <li><a href='pragma.html#pragma_defer_foreign_keys'>defer_foreign_keys</a></li>
 | |
| <li><a href='pragma.html#pragma_empty_result_callbacks'><s>empty_result_callbacks¹</s></a></li>
 | |
| <li><a href='pragma.html#pragma_encoding'>encoding</a></li>
 | |
| <li><a href='pragma.html#pragma_foreign_key_check'>foreign_key_check</a></li>
 | |
| <li><a href='pragma.html#pragma_foreign_key_list'>foreign_key_list</a></li>
 | |
| <li><a href='pragma.html#pragma_foreign_keys'>foreign_keys</a></li>
 | |
| <li><a href='pragma.html#pragma_freelist_count'>freelist_count</a></li>
 | |
| <li><a href='pragma.html#pragma_full_column_names'><s>full_column_names¹</s></a></li>
 | |
| <li><a href='pragma.html#pragma_fullfsync'>fullfsync</a></li>
 | |
| <li><a href='pragma.html#pragma_function_list'>function_list</a></li>
 | |
| <li><a href='pragma.html#pragma_hard_heap_limit'>hard_heap_limit</a></li>
 | |
| <li><a href='pragma.html#pragma_ignore_check_constraints'>ignore_check_constraints</a></li>
 | |
| <li><a href='pragma.html#pragma_incremental_vacuum'>incremental_vacuum</a></li>
 | |
| <li><a href='pragma.html#pragma_index_info'>index_info</a></li>
 | |
| <li><a href='pragma.html#pragma_index_list'>index_list</a></li>
 | |
| <li><a href='pragma.html#pragma_index_xinfo'>index_xinfo</a></li>
 | |
| <li><a href='pragma.html#pragma_integrity_check'>integrity_check</a></li>
 | |
| <li><a href='pragma.html#pragma_journal_mode'>journal_mode</a></li>
 | |
| <li><a href='pragma.html#pragma_journal_size_limit'>journal_size_limit</a></li>
 | |
| <li><a href='pragma.html#pragma_legacy_alter_table'>legacy_alter_table</a></li>
 | |
| <li><a href='pragma.html#pragma_legacy_file_format'>legacy_file_format</a></li>
 | |
| <li><a href='pragma.html#pragma_locking_mode'>locking_mode</a></li>
 | |
| <li><a href='pragma.html#pragma_max_page_count'>max_page_count</a></li>
 | |
| <li><a href='pragma.html#pragma_mmap_size'>mmap_size</a></li>
 | |
| <li><a href='pragma.html#pragma_module_list'>module_list</a></li>
 | |
| <li><a href='pragma.html#pragma_optimize'>optimize</a></li>
 | |
| <li><a href='pragma.html#pragma_page_count'>page_count</a></li>
 | |
| <li><a href='pragma.html#pragma_page_size'>page_size</a></li>
 | |
| <li><a href='pragma.html#pragma_parser_trace'>parser_trace²</a></li>
 | |
| <li><a href='pragma.html#pragma_pragma_list'>pragma_list</a></li>
 | |
| <li><a href='pragma.html#pragma_query_only'>query_only</a></li>
 | |
| <li><a href='pragma.html#pragma_quick_check'>quick_check</a></li>
 | |
| <li><a href='pragma.html#pragma_read_uncommitted'>read_uncommitted</a></li>
 | |
| <li><a href='pragma.html#pragma_recursive_triggers'>recursive_triggers</a></li>
 | |
| <li><a href='pragma.html#pragma_reverse_unordered_selects'>reverse_unordered_selects</a></li>
 | |
| <li><a href='pragma.html#pragma_schema_version'>schema_version³</a></li>
 | |
| <li><a href='pragma.html#pragma_secure_delete'>secure_delete</a></li>
 | |
| <li><a href='pragma.html#pragma_short_column_names'><s>short_column_names¹</s></a></li>
 | |
| <li><a href='pragma.html#pragma_shrink_memory'>shrink_memory</a></li>
 | |
| <li><a href='pragma.html#pragma_soft_heap_limit'>soft_heap_limit</a></li>
 | |
| <li><a href='pragma.html#pragma_stats'>stats³</a></li>
 | |
| <li><a href='pragma.html#pragma_synchronous'>synchronous</a></li>
 | |
| <li><a href='pragma.html#pragma_table_info'>table_info</a></li>
 | |
| <li><a href='pragma.html#pragma_table_xinfo'>table_xinfo</a></li>
 | |
| <li><a href='pragma.html#pragma_temp_store'>temp_store</a></li>
 | |
| <li><a href='pragma.html#pragma_temp_store_directory'><s>temp_store_directory¹</s></a></li>
 | |
| <li><a href='pragma.html#pragma_threads'>threads</a></li>
 | |
| <li><a href='pragma.html#pragma_trusted_schema'>trusted_schema</a></li>
 | |
| <li><a href='pragma.html#pragma_user_version'>user_version</a></li>
 | |
| <li><a href='pragma.html#pragma_vdbe_addoptrace'>vdbe_addoptrace²</a></li>
 | |
| <li><a href='pragma.html#pragma_vdbe_debug'>vdbe_debug²</a></li>
 | |
| <li><a href='pragma.html#pragma_vdbe_listing'>vdbe_listing²</a></li>
 | |
| <li><a href='pragma.html#pragma_vdbe_trace'>vdbe_trace²</a></li>
 | |
| <li><a href='pragma.html#pragma_wal_autocheckpoint'>wal_autocheckpoint</a></li>
 | |
| <li><a href='pragma.html#pragma_wal_checkpoint'>wal_checkpoint</a></li>
 | |
| <li><a href='pragma.html#pragma_writable_schema'>writable_schema³</a></li>
 | |
| </ul>
 | |
| </div>
 | |
| 
 | |
| <p>Notes:
 | |
| <ol>
 | |
| <li>Pragmas whose names are <s>struck through</s>
 | |
| are deprecated. Do not use them. They exist
 | |
| for historical compatibility.
 | |
| <li>These pragmas are only available in builds using non-standard
 | |
| compile-time options.
 | |
| <li>These pragmas are used for testing SQLite and are not recommended
 | |
| for use in application programs.</ol></p>
 | |
| <a name="pragma_analysis_limit"></a>
 | |
| <h _id=pragma_analysis_limit style="display:none"> PRAGMA analysis_limit</h><hr>
 | |
|    <p><b>PRAGMA analysis_limit;
 | |
|         <br>PRAGMA analysis_limit = </b><i>N</i><b>;</b></p>
 | |
|    <p>Query or change a limit on the <a href="lang_analyze.html#approx">approximate ANALYZE</a> setting.
 | |
|       This is approximate number of
 | |
|       rows examined in each index by the <a href="lang_analyze.html">ANALYZE</a> command.
 | |
|       If the argument <i>N</i> is omitted, then the analysis limit
 | |
|       is unchanged.
 | |
|       If the limit is zero, then the analysis limit is disabled and
 | |
|       the ANALYZE command will examine all rows of each index.
 | |
|       If N is greater than zero, then the analysis limit is set to N
 | |
|       and subsequent ANALYZE commands will breaks off processing
 | |
|       each index after it has examined approximately N rows.
 | |
|       If N is a negative number or something other than an integer value,
 | |
|       then the pragma behaves as if the N argument was omitted.
 | |
|       In all cases, the value returned is the new analysis limit used
 | |
|       for subsequent ANALYZE commands.
 | |
|    <p>This pragma can be used to help the ANALYZE command run faster
 | |
|       on large databases.  The results of analysis are not as good
 | |
|       when only part of each index is examined, but the results are
 | |
|       usually good enough.  Setting N to 100 or 1000 allows the
 | |
|       ANALYZE command to run very quickly, even on multi-gigabyte
 | |
|       database files.  This pragma is particularly useful in combination
 | |
|       with <a href="pragma.html#pragma_optimize">PRAGMA optimize</a>.
 | |
|    <p>This pragma was added in SQLite version 3.32.0 (2020-05-22).
 | |
|       The current implementation only uses the lower 31 bits of the
 | |
|       N value - higher order bits are silently ignored.  Future versions
 | |
|       of SQLite might begin using higher order bits.
 | |
| <a name="pragma_application_id"></a>
 | |
| <h _id=pragma_application_id style="display:none"> PRAGMA application_id</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>application_id;
 | |
|      <br>PRAGMA </b><i>schema.</i><b>application_id = </b><i>integer </i><b>;</b>
 | |
|   
 | |
|     <p>The application_id PRAGMA is used to query or set the 32-bit
 | |
|        signed big-endian "Application ID" integer located at offset
 | |
|        68 into the <a href="fileformat2.html#database_header">database header</a>.  Applications that use SQLite as their
 | |
|        <a href="appfileformat.html">application file-format</a> should set the Application ID integer to
 | |
|        a unique integer so that utilities such as 
 | |
|        <a href="http://www.darwinsys.com/file/">file(1)</a> can determine the specific
 | |
|        file type rather than just reporting "SQLite3 Database".  A list of
 | |
|        assigned application IDs can be seen by consulting the
 | |
|        <a href="http://www.sqlite.org/src/artifact?ci=trunk&filename=magic.txt">magic.txt</a> file in the SQLite source repository.
 | |
| 
 | |
| <p>   See also the <a href="pragma.html#pragma_user_version">user_version pragma</a>.
 | |
| <a name="pragma_auto_vacuum"></a>
 | |
| <h _id=pragma_auto_vacuum style="display:none"> PRAGMA auto_vacuum</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>auto_vacuum;<br>
 | |
|           PRAGMA </b><i>schema.</i><b>auto_vacuum = </b>
 | |
|            <i>0 | NONE | 1 | FULL | 2 | INCREMENTAL</i><b>;</b></p>
 | |
| 
 | |
|     <p>Query or set the auto-vacuum status in the database.</p>
 | |
| 
 | |
|     <p>The default setting for auto-vacuum is 0 or "none",
 | |
|     unless the <a href="compile.html#default_autovacuum">SQLITE_DEFAULT_AUTOVACUUM</a> compile-time option is used.
 | |
|     The "none" setting means that auto-vacuum is disabled.
 | |
|     When auto-vacuum is disabled and data is deleted data from a database,
 | |
|     the database file remains the same size.  Unused database file 
 | |
|     pages are added to a "<a href="fileformat2.html#freelist">freelist</a>" and reused for subsequent inserts.  So
 | |
|     no database file space is lost.  However, the database file does not
 | |
|     shrink.  In this mode the <a href="lang_vacuum.html">VACUUM</a>
 | |
|     command can be used to rebuild the entire database file and
 | |
|     thus reclaim unused disk space.</p>
 | |
| 
 | |
|     <p>When the auto-vacuum mode is 1  or "full", the freelist pages are
 | |
|     moved to the end of the database file and the database file is truncated
 | |
|     to remove the freelist pages at every transaction commit.
 | |
|     Note, however, that auto-vacuum only truncates the freelist pages
 | |
|     from the file.  Auto-vacuum does not defragment the database nor
 | |
|     repack individual database pages the way that the
 | |
|     <a href="lang_vacuum.html">VACUUM</a> command does.  In fact, because
 | |
|     it moves pages around within the file, auto-vacuum can actually
 | |
|     make fragmentation worse.</p>
 | |
| 
 | |
|     <p>Auto-vacuuming is only possible if the database stores some
 | |
|     additional information that allows each database page to be
 | |
|     traced backwards to its referrer.  Therefore, auto-vacuuming must
 | |
|     be turned on before any tables are created.  It is not possible
 | |
|     to enable or disable auto-vacuum after a table has been created.</p>
 | |
| 
 | |
|     <p>When the value of auto-vacuum is 2 or "incremental" then the additional
 | |
|     information needed to do auto-vacuuming is stored in the database file
 | |
|     but auto-vacuuming does not occur automatically at each commit as it
 | |
|     does with auto_vacuum=full.  In incremental mode, the separate
 | |
|     <a href="pragma.html#pragma_incremental_vacuum">incremental_vacuum</a> pragma must
 | |
|     be invoked to cause the auto-vacuum to occur.</p>
 | |
| 
 | |
|     <p>The database connection can be changed between full and incremental
 | |
|     autovacuum mode at any time.  However, changing from
 | |
|     "none" to "full" or "incremental" can only occur when the database 
 | |
|     is new (no tables
 | |
|     have yet been created) or by running the <a href="lang_vacuum.html">VACUUM</a> command.  To
 | |
|     change auto-vacuum modes, first use the auto_vacuum pragma to set
 | |
|     the new desired mode, then invoke the <a href="lang_vacuum.html">VACUUM</a> command to 
 | |
|     reorganize the entire database file.  To change from "full" or
 | |
|     "incremental" back to "none" always requires running <a href="lang_vacuum.html">VACUUM</a> even
 | |
|     on an empty database.
 | |
|     </p>
 | |
| 
 | |
|     <p>When the auto_vacuum pragma is invoked with no arguments, it
 | |
|     returns the current auto_vacuum mode.</p>
 | |
| <a name="pragma_automatic_index"></a>
 | |
| <h _id=pragma_automatic_index style="display:none"> PRAGMA automatic_index</h><hr>
 | |
|     <p><b>PRAGMA automatic_index;
 | |
|      <br>PRAGMA automatic_index = </b><i>boolean</i><b>;</b></p>
 | |
| 
 | |
|     <p>Query, set, or clear the <a href="optoverview.html#autoindex">automatic indexing</a> capability.
 | |
|     <p><a href="optoverview.html#autoindex">Automatic indexing</a> is enabled by default as of 
 | |
|     <a href="releaselog/3_7_17.html">version 3.7.17</a> (2013-05-20),
 | |
|     but this might change in future releases of SQLite.
 | |
| <a name="pragma_busy_timeout"></a>
 | |
| <h _id=pragma_busy_timeout style="display:none"> PRAGMA busy_timeout</h><hr>
 | |
|     <p><b>PRAGMA busy_timeout;
 | |
|          <br>PRAGMA busy_timeout = </b><i>milliseconds</i><b>;</b></p>
 | |
|     <p>Query or change the setting of the
 | |
|     <a href="c3ref/busy_timeout.html">busy timeout</a>.
 | |
|     This pragma is an alternative to the <a href="c3ref/busy_timeout.html">sqlite3_busy_timeout()</a> C-language
 | |
|     interface which is made available as a pragma for use with language
 | |
|     bindings that do not provide direct access to <a href="c3ref/busy_timeout.html">sqlite3_busy_timeout()</a>.
 | |
| 
 | |
|     <p>Each database connection can only have a single
 | |
|     <a href="c3ref/busy_handler.html">busy handler</a>.  This PRAGMA sets the busy handler
 | |
|     for the process, possibly overwriting any previously set busy handler.
 | |
| <a name="pragma_cache_size"></a>
 | |
| <h _id=pragma_cache_size style="display:none"> PRAGMA cache_size</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>cache_size;
 | |
|        <br>PRAGMA </b><i>schema.</i><b>cache_size = </b><i>pages</i><b>;
 | |
|        <br>PRAGMA </b><i>schema.</i><b>cache_size = -</b><i>kibibytes</i><b>;</b></p>
 | |
|     <p>Query or change the suggested maximum number of database disk pages
 | |
|     that SQLite will hold in memory at once per open database file.  Whether
 | |
|     or not this suggestion is honored is at the discretion of the
 | |
|     <a href="c3ref/pcache_methods2.html">Application Defined Page Cache</a>.
 | |
|     The default page cache that is built into SQLite honors the request,
 | |
|     however alternative application-defined page cache implementations
 | |
|     may choose to interpret the suggested cache size in different ways
 | |
|     or to ignore it all together.
 | |
|     The default suggested cache size is -2000, which means the cache size
 | |
|     is limited to 2048000 bytes of memory.
 | |
|     The default suggested cache size can be altered using the
 | |
|     <a href="compile.html#default_cache_size">SQLITE_DEFAULT_CACHE_SIZE</a> compile-time options.
 | |
|     The TEMP database has a default suggested cache size of 0 pages.</p>
 | |
| 
 | |
|     <p>If the argument N is positive then the suggested cache size is set 
 | |
|     to N. If the argument N is negative, then the
 | |
|     number of cache pages is adjusted to be a number of pages that would
 | |
|     use approximately abs(N*1024) bytes of memory based on the current
 | |
|     page size.  SQLite remembers the number of pages in the page cache,
 | |
|     not the amount of memory used.  So if you set the cache size using
 | |
|     a negative number and subsequently change the page size (using the
 | |
|     <a href="pragma.html#pragma_page_size">PRAGMA page_size</a> command) then the maximum amount of cache
 | |
|     memory will go up or down in proportion to the change in page size.
 | |
| 
 | |
|     <p><i>Backwards compatibility note:</i>
 | |
|     The behavior of cache_size with a negative N
 | |
|     was different prior to <a href="releaselog/3_7_10.html">version 3.7.10</a> (2012-01-16).  In
 | |
|     earlier versions, the number of pages in the cache was set
 | |
|     to the absolute value of N.</p>
 | |
| 
 | |
|     <p>When you change the cache size using the cache_size pragma, the
 | |
|     change only endures for the current session.  The cache size reverts
 | |
|     to the default value when the database is closed and reopened.</p>
 | |
| 
 | |
|     <p>The default page cache implemention does not allocate
 | |
|     the full amount of cache memory all at once.  Cache memory
 | |
|     is allocated in smaller chunks on an as-needed basis.  The page_cache
 | |
|     setting is a (suggested) upper bound on the amount of memory that the
 | |
|     cache can use, not the amount of memory it will use all of the time.
 | |
|     This is the behavior of the default page cache implementation, but an
 | |
|     <a href="c3ref/pcache_methods2.html">application defined page cache</a> is free
 | |
|     to behave differently if it wants.
 | |
| <a name="pragma_cache_spill"></a>
 | |
| <h _id=pragma_cache_spill style="display:none"> PRAGMA cache_spill</h><hr>
 | |
|     <p><b>PRAGMA cache_spill;
 | |
|          <br>PRAGMA cache_spill=</b><i>boolean</i><b>;
 | |
|          <br>PRAGMA </b><i>schema.</i><b>cache_spill=<i>N</i>;</b></p>
 | |
| 
 | |
|     <p>The cache_spill pragma enables or disables the ability of the pager
 | |
|     to spill dirty cache pages to the database file in the middle of a 
 | |
|     transaction.  Cache_spill is enabled by default and most applications
 | |
|     should leave it that way as cache spilling is usually advantageous.
 | |
|     However, a cache spill has the side-effect of acquiring an
 | |
|     <a href="lockingv3.html#excl_lock">EXCLUSIVE lock</a> on the database file.  Hence, some applications that
 | |
|     have large long-running transactions may want to disable cache spilling
 | |
|     in order to prevent the application from acquiring an exclusive lock
 | |
|     on the database until the moment that the transaction <a href="lang_transaction.html">COMMIT</a>s.
 | |
|     <p>The "PRAGMA cache_spill=<i>N</i>" form of this pragma sets a minimum
 | |
|     cache size threshold required for spilling to occur. The number of pages
 | |
|     in cache must exceed both the cache_spill threshold and the maximum cache
 | |
|     size set by the <a href="pragma.html#pragma_cache_size">PRAGMA cache_size</a> statement in order for spilling to
 | |
|     occur.
 | |
|     <p>The "PRAGMA cache_spill=<i>boolean</i>" form of this pragma applies
 | |
|     across all databases attached to the database connection.  But the
 | |
|     "PRAGMA cache_spill=<i>N</i>" form of this statement only applies to
 | |
|     the "main" schema or whatever other schema is specified as part of the
 | |
|     statement.
 | |
| <a name="pragma_case_sensitive_like"></a>
 | |
| <h _id=pragma_case_sensitive_like style="display:none"> PRAGMA case_sensitive_like</h><hr>
 | |
|     <p><b>PRAGMA case_sensitive_like = </b><i>boolean</i><b>;</b></p>
 | |
|     <p>The default behavior of the <a href="lang_expr.html#like">LIKE</a> operator is to ignore case
 | |
|     for ASCII characters. Hence, by default <b>'a' LIKE 'A'</b> is
 | |
|     true.  The case_sensitive_like pragma installs a new application-defined
 | |
|     LIKE function that is either case sensitive or insensitive depending
 | |
|     on the value of the case_sensitive_like pragma.
 | |
|     When case_sensitive_like is disabled, the default LIKE behavior is
 | |
|     expressed.  When case_sensitive_like is enabled, case becomes
 | |
|     significant.  So, for example,
 | |
|     <b>'a' LIKE 'A'</b> is false but <b>'a' LIKE 'a'</b> is still true.</p>
 | |
| 
 | |
|     <p>This pragma uses <a href="c3ref/create_function.html">sqlite3_create_function()</a> to overload the
 | |
|     LIKE and GLOB functions, which may override previous implementations
 | |
|     of LIKE and GLOB registered by the application.  This pragma
 | |
|     only changes the behavior of the SQL <a href="lang_expr.html#like">LIKE</a> operator.  It does not
 | |
|     change the behavior of the <a href="c3ref/strlike.html">sqlite3_strlike()</a> C-language interface,
 | |
|     which is always case insensitive.</p>
 | |
| <a name="pragma_cell_size_check"></a>
 | |
| <h _id=pragma_cell_size_check style="display:none"> PRAGMA cell_size_check</h><hr>
 | |
|     <p><b>PRAGMA cell_size_check
 | |
|        <br>PRAGMA cell_size_check = </b><i>boolean</i><b>;</b></p>
 | |
|     <p>The cell_size_check pragma enables or disables additional sanity
 | |
|     checking on database b-tree pages as they are initially read from disk.
 | |
|     With cell size checking enabled, database corruption is detected earlier
 | |
|     and is less likely to "spread".  However, there is a small performance
 | |
|     hit for doing the extra checks and so cell size checking is turned off
 | |
|     by default.
 | |
| <a name="pragma_checkpoint_fullfsync"></a>
 | |
| <h _id=pragma_checkpoint_fullfsync style="display:none"> PRAGMA checkpoint_fullfsync</h><hr>
 | |
|     <p><b>PRAGMA checkpoint_fullfsync
 | |
|        <br>PRAGMA checkpoint_fullfsync = </b><i>boolean</i><b>;</b></p>
 | |
|     <p>Query or change the fullfsync flag for <a href="wal.html#ckpt">checkpoint</a> operations.
 | |
|     If this flag is set, then the F_FULLFSYNC syncing method is used
 | |
|     during checkpoint operations on systems that support F_FULLFSYNC. 
 | |
|     The default value of the checkpoint_fullfsync flag
 | |
|     is off.  Only Mac OS-X supports F_FULLFSYNC.</p>
 | |
| 
 | |
|     <p>If the <a href="pragma.html#pragma_fullfsync">fullfsync</a> flag is set, then the F_FULLFSYNC syncing
 | |
|     method is used for all sync operations and the checkpoint_fullfsync
 | |
|     setting is irrelevant.</p>
 | |
| <a name="pragma_collation_list"></a>
 | |
| <h _id=pragma_collation_list style="display:none"> PRAGMA collation_list</h><hr>
 | |
|     <p><b>PRAGMA collation_list;</b></p>
 | |
|     <p>Return a list of the collating sequences defined for the current
 | |
|     database connection.</p>
 | |
| <a name="pragma_compile_options"></a>
 | |
| <h _id=pragma_compile_options style="display:none"> PRAGMA compile_options</h><hr>
 | |
|     <p><b>PRAGMA compile_options;</b></p>
 | |
|     <p>This pragma returns the names of <a href="compile.html">compile-time options</a> used when
 | |
|     building SQLite, one option per row.  The "SQLITE_" prefix is omitted
 | |
|     from the returned option names.  See also the
 | |
|     <a href="c3ref/compileoption_get.html">sqlite3_compileoption_get()</a> C/C++ interface and the
 | |
|     <a href="lang_corefunc.html#sqlite_compileoption_get">sqlite_compileoption_get()</a> SQL functions.</p>
 | |
| <a name="pragma_count_changes"></a>
 | |
| <h _id=pragma_count_changes style="display:none"> PRAGMA count_changes</h><hr>
 | |
|     <p><b>PRAGMA count_changes;
 | |
|        <br>PRAGMA count_changes = </b>boolean</i><b>;</b></p>
 | |
| 
 | |
|     <p>Query or change the count-changes flag. Normally, when the
 | |
|     count-changes flag is not set, <a href="lang_insert.html">INSERT</a>, <a href="lang_update.html">UPDATE</a> and <a href="lang_delete.html">DELETE</a> statements
 | |
|     return no data. When count-changes is set, each of these commands 
 | |
|     returns a single row of data consisting of one integer value - the
 | |
|     number of rows inserted, modified or deleted by the command. The 
 | |
|     returned change count does not include any insertions, modifications
 | |
|     or deletions performed by triggers, any changes made automatically
 | |
|     by <a href="foreignkeys.html#fk_actions">foreign key actions</a>, or updates caused by an <a href="lang_upsert.html">upsert</a>.</p>
 | |
| 
 | |
|     <p>Another way to get the row change counts is to use the
 | |
|     <a href="c3ref/changes.html">sqlite3_changes()</a> or <a href="c3ref/total_changes.html">sqlite3_total_changes()</a> interfaces.
 | |
|     There is a subtle different, though.  When an INSERT, UPDATE, or
 | |
|     DELETE is run against a view using an <a href="lang_createtrigger.html#instead_of_trigger">INSTEAD OF trigger</a>,
 | |
|     the count_changes pragma reports the number of rows in the view
 | |
|     that fired the trigger, whereas <a href="c3ref/changes.html">sqlite3_changes()</a> and
 | |
|     <a href="c3ref/total_changes.html">sqlite3_total_changes()</a> do not.
 | |
| 
 | |
|     
 | |
|     <p style='background-color: #ffd0d0;'>
 | |
|     <b>This pragma is deprecated</b> and exists
 | |
|     for backwards compatibility only.  New applications
 | |
|     should avoid using this pragma.  Older applications should discontinue
 | |
|     use of this pragma at the earliest opportunity.  This pragma may be omitted
 | |
|     from the build when SQLite is compiled using <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a>.
 | |
|     </p>
 | |
|   
 | |
| <a name="pragma_data_store_directory"></a>
 | |
| <h _id=pragma_data_store_directory style="display:none"> PRAGMA data_store_directory</h><hr>
 | |
|     <p><b>PRAGMA data_store_directory;
 | |
|       <br>PRAGMA data_store_directory = '</b><i>directory-name</i><b>';</b></p>
 | |
|     <p>Query or change the value of the <a href="c3ref/data_directory.html">sqlite3_data_directory</a> global
 | |
|     variable, which windows operating-system interface backends use to
 | |
|     determine where to store database files specified using a relative
 | |
|     pathname.</p>
 | |
| 
 | |
|     <p>Changing the data_store_directory setting is <u>not</u> threadsafe.
 | |
|     Never change the data_store_directory setting if another thread
 | |
|     within the application is running any SQLite interface at the same time.
 | |
|     Doing so results in undefined behavior.  Changing the data_store_directory
 | |
|     setting writes to the <a href="c3ref/data_directory.html">sqlite3_data_directory</a> global
 | |
|     variable and that global variable is not protected by a mutex.</p>
 | |
| 
 | |
|     <p>This facility is provided for WinRT which does not have an OS
 | |
|     mechanism for reading or changing the current working directory.
 | |
|     The use of this pragma in any other context is discouraged and may
 | |
|     be disallowed in future releases.</p>
 | |
| 
 | |
|     
 | |
|     <p style='background-color: #ffd0d0;'>
 | |
|     <b>This pragma is deprecated</b> and exists
 | |
|     for backwards compatibility only.  New applications
 | |
|     should avoid using this pragma.  Older applications should discontinue
 | |
|     use of this pragma at the earliest opportunity.  This pragma may be omitted
 | |
|     from the build when SQLite is compiled using <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a>.
 | |
|     </p>
 | |
|   
 | |
| <a name="pragma_data_version"></a>
 | |
| <h _id=pragma_data_version style="display:none"> PRAGMA data_version</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>data_version;</b></p>
 | |
|     <p>The "PRAGMA data_version" command provides an indication that the
 | |
|     database file has been modified.
 | |
|     Interactive programs that hold database content in memory or that
 | |
|     display database content on-screen can use the PRAGMA data_version
 | |
|     command to determine if they need to flush and reload their memory
 | |
|     or update the screen display.</p>
 | |
| 
 | |
|     <p>The integer values returned by two
 | |
|     invocations of "PRAGMA data_version" from the same connection
 | |
|     will be different if changes were committed to the database 
 | |
|     by any other connection in the interim.
 | |
|     The "PRAGMA data_version" value is unchanged for commits made
 | |
|     on the same database connection.
 | |
|     The behavior of "PRAGMA data_version" is the same for all database
 | |
|     connections, including database connections in separate processes
 | |
|     and <a href="sharedcache.html">shared cache</a> database connections.
 | |
| 
 | |
|     <p>The "PRAGMA data_version" value is a local property of each
 | |
|     database connection and so values returned by two concurrent invocations
 | |
|     of "PRAGMA data_version" on separate database connections are 
 | |
|     often different even though the underlying database is identical.
 | |
|     It is only meaningful to compare the "PRAGMA data_version" values
 | |
|     returned by the same database connection at two different points in
 | |
|     time.
 | |
| <a name="pragma_database_list"></a>
 | |
| <h _id=pragma_database_list style="display:none"> PRAGMA database_list</h><hr>
 | |
|     <p><b>PRAGMA database_list;</b></p>
 | |
|     <p>This pragma works like a query to return one row for each database
 | |
|     attached to the current database connection.
 | |
|     The second column is "main" for the main database file, "temp"
 | |
|     for the database file used to store TEMP objects, or the name of the
 | |
|     ATTACHed database for other database files.
 | |
|     The third column is the name of the database file itself, or an empty
 | |
|     string if the database is not associated with a file.</p>
 | |
| <a name="pragma_default_cache_size"></a>
 | |
| <h _id=pragma_default_cache_size style="display:none"> PRAGMA default_cache_size</h><hr>
 | |
|     <b>PRAGMA </b><i>schema.</i><b>default_cache_size;
 | |
|        <br>PRAGMA </b><i>schema.</i><b>default_cache_size
 | |
|             = </b><i>Number-of-pages</i><b>;</b></p>
 | |
| 
 | |
|     <p>This pragma queries or sets the suggested maximum number of pages
 | |
|     of disk cache that will be allocated per open database file.
 | |
|     The difference between this pragma and <a href="pragma.html#pragma_cache_size">cache_size</a> is that the
 | |
|     value set here persists across database connections.
 | |
|     The value of the default cache size is stored in the 4-byte
 | |
|     big-endian integer located at offset 48 in the header of the
 | |
|     database file.
 | |
|     </p>
 | |
| 
 | |
|     
 | |
|     <p style='background-color: #ffd0d0;'>
 | |
|     <b>This pragma is deprecated</b> and exists
 | |
|     for backwards compatibility only.  New applications
 | |
|     should avoid using this pragma.  Older applications should discontinue
 | |
|     use of this pragma at the earliest opportunity.  This pragma may be omitted
 | |
|     from the build when SQLite is compiled using <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a>.
 | |
|     </p>
 | |
|   
 | |
| <a name="pragma_defer_foreign_keys"></a>
 | |
| <h _id=pragma_defer_foreign_keys style="display:none"> PRAGMA defer_foreign_keys</h><hr>
 | |
|     <p><b>PRAGMA defer_foreign_keys
 | |
|        <br>PRAGMA defer_foreign_keys = </b><i>boolean</i><b>;</b></p>
 | |
|     <p>When the defer_foreign_keys <a href="pragma.html#syntax">PRAGMA</a> is on,
 | |
|     enforcement of all <a href="foreignkeys.html">foreign key constraints</a> is delayed until the
 | |
|     outermost transaction is committed.  The defer_foreign_keys pragma
 | |
|     defaults to OFF so that foreign key constraints are only deferred if
 | |
|     they are created as "DEFERRABLE INITIALLY DEFERRED".  The 
 | |
|     defer_foreign_keys pragma is automatically switched off at each
 | |
|     COMMIT or ROLLBACK.  Hence, the defer_foreign_keys pragma must be
 | |
|     separately enabled for each transaction.  This pragma is
 | |
|     only meaningful if foreign key constraints are enabled, of course.</p>
 | |
| 
 | |
|     <p>The <a href="c3ref/db_status.html">sqlite3_db_status</a>(db,<a href="c3ref/c_dbstatus_options.html#sqlitedbstatusdeferredfks">SQLITE_DBSTATUS_DEFERRED_FKS</a>,...)
 | |
|     C-language interface can be used during a transaction to determine 
 | |
|     if there are deferred and unresolved foreign key constraints.</p>
 | |
| <a name="pragma_empty_result_callbacks"></a>
 | |
| <h _id=pragma_empty_result_callbacks style="display:none"> PRAGMA empty_result_callbacks</h><hr>
 | |
|     <p><b>PRAGMA empty_result_callbacks;
 | |
|        <br>PRAGMA empty_result_callbacks = </b><i>boolean</i><b>;</b></p>
 | |
| 
 | |
|     <p>Query or change the empty-result-callbacks flag.</p>
 | |
| 
 | |
|     <p>The empty-result-callbacks flag affects the <a href="c3ref/exec.html">sqlite3_exec()</a> API only.
 | |
|     Normally, when the empty-result-callbacks flag is cleared, the
 | |
|     callback function supplied to the <a href="c3ref/exec.html">sqlite3_exec()</a> is not invoked
 | |
|     for commands that return zero rows of data.  When empty-result-callbacks
 | |
|     is set in this situation, the callback function is invoked exactly once,
 | |
|     with the third parameter set to 0 (NULL). This is to enable programs  
 | |
|     that use the <a href="c3ref/exec.html">sqlite3_exec()</a> API to retrieve column-names even when
 | |
|     a query returns no data.</p>
 | |
| 
 | |
|     
 | |
|     <p style='background-color: #ffd0d0;'>
 | |
|     <b>This pragma is deprecated</b> and exists
 | |
|     for backwards compatibility only.  New applications
 | |
|     should avoid using this pragma.  Older applications should discontinue
 | |
|     use of this pragma at the earliest opportunity.  This pragma may be omitted
 | |
|     from the build when SQLite is compiled using <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a>.
 | |
|     </p>
 | |
|   
 | |
| <a name="pragma_encoding"></a>
 | |
| <h _id=pragma_encoding style="display:none"> PRAGMA encoding</h><hr>
 | |
|    <p><b>PRAGMA encoding;
 | |
|        <br>PRAGMA encoding = 'UTF-8';
 | |
|        <br>PRAGMA encoding = 'UTF-16';
 | |
|        <br>PRAGMA encoding = 'UTF-16le';
 | |
|        <br>PRAGMA encoding = 'UTF-16be';</b></p>
 | |
|     <p>In first form, if the main database has already been
 | |
|     created, then this pragma returns the text encoding used by the
 | |
|     main database, one of 'UTF-8', 'UTF-16le' (little-endian UTF-16
 | |
|     encoding) or 'UTF-16be' (big-endian UTF-16 encoding).  If the main
 | |
|     database has not already been created, then the value returned is the
 | |
|     text encoding that will be used to create the main database, if 
 | |
|     it is created by this session.</p>
 | |
| 
 | |
|     <p>The second through fifth forms of this pragma
 | |
|     set the encoding that the main database will be created with if
 | |
|     it is created by this session. The string 'UTF-16' is interpreted
 | |
|     as "UTF-16 encoding using native machine byte-ordering".  It is not
 | |
|     possible to change the text encoding of a database after it has been
 | |
|     created and any attempt to do so will be silently ignored.</p>
 | |
| 
 | |
|     <p>Once an encoding has been set for a database, it cannot be changed.</p>
 | |
| 
 | |
|     <p>Databases created by the <a href="lang_attach.html">ATTACH</a> command always use the same encoding
 | |
|     as the main database.  An attempt to <a href="lang_attach.html">ATTACH</a> a database with a different
 | |
|     text encoding from the "main" database will fail.</p>
 | |
| <a name="pragma_foreign_key_check"></a>
 | |
| <h _id=pragma_foreign_key_check style="display:none"> PRAGMA foreign_key_check</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>foreign_key_check;
 | |
|         <br>PRAGMA </b><i>schema.</i><b>foreign_key_check(</b><i>table-name</i><b>);</b></b></p>
 | |
| 
 | |
|     <p>The foreign_key_check pragma checks the database, or the table
 | |
|     called "<i>table-name</i>", for 
 | |
|     <a href="foreignkeys.html">foreign key constraints</a> that are violated.  The foreign_key_check
 | |
|     pragma returns one row output for each foreign key violation.
 | |
|     There are four columns in each result row.
 | |
|     The first column is the name of the table that contains the REFERENCES
 | |
|     clause.  The second column is the <a href="lang_createtable.html#rowid">rowid</a> of the row that
 | |
|     contains the invalid REFERENCES clause, or NULL if the child table is a
 | |
|     <a href="withoutrowid.html">WITHOUT ROWID</a> table.  The third column is the name
 | |
|     of the table that is referred to. The fourth column is the index of
 | |
|     the specific foreign key constraint that failed.  The fourth column
 | |
|     in the output of the foreign_key_check pragma is the same integer as
 | |
|     the first column in the output of the <a href="pragma.html#pragma_foreign_key_list">foreign_key_list pragma</a>.
 | |
|     When a "<i>table-name</i>" is specified, the only foreign key constraints
 | |
|     checked are those created by REFERENCES clauses in the
 | |
|     CREATE TABLE statement for <i>table-name</i>.</p>
 | |
| <a name="pragma_foreign_key_list"></a>
 | |
| <h _id=pragma_foreign_key_list style="display:none"> PRAGMA foreign_key_list</h><hr>
 | |
|     <p><b>PRAGMA foreign_key_list(</b><i>table-name</i><b>);</b></p>
 | |
| 
 | |
|     <p>This pragma returns one row for each <a href="foreignkeys.html">foreign key constraint</a>
 | |
|     created by a REFERENCES clause in the CREATE TABLE statement of
 | |
|     table "<i>table-name</i>".
 | |
| <a name="pragma_foreign_keys"></a>
 | |
| <h _id=pragma_foreign_keys style="display:none"> PRAGMA foreign_keys</h><hr>
 | |
|      <p><b>PRAGMA foreign_keys;
 | |
|        <br>PRAGMA foreign_keys = </b><i>boolean</i><b>;</b></p>
 | |
|     <p>Query, set, or clear the enforcement of <a href="foreignkeys.html">foreign key constraints</a>.
 | |
| 
 | |
|     <p>This pragma is a no-op within a transaction; foreign key constraint
 | |
|        enforcement may only be enabled or disabled when there is no pending
 | |
|        <a href="lang_transaction.html">BEGIN</a> or <a href="lang_savepoint.html">SAVEPOINT</a>.
 | |
| 
 | |
|     <p>Changing the foreign_keys setting affects the execution of
 | |
|        all statements prepared
 | |
|        using the database connection, including those prepared before the
 | |
|        setting was changed. Any existing statements prepared using the legacy 
 | |
|        <a href="c3ref/prepare.html">sqlite3_prepare()</a> interface may fail with an <a href="rescode.html#schema">SQLITE_SCHEMA</a> error
 | |
|        after the foreign_keys setting is changed.
 | |
| 
 | |
|     <p>As of SQLite <a href="releaselog/3_6_19.html">version 3.6.19</a>, the default setting for foreign
 | |
|        key enforcement is OFF.  However, that might change in a future
 | |
|        release of SQLite.  The default setting for foreign key enforcement
 | |
|        can be specified at compile-time using the <a href="compile.html#default_foreign_keys">SQLITE_DEFAULT_FOREIGN_KEYS</a>
 | |
|        preprocessor macro.  To minimize future problems, applications should
 | |
|        set the foreign key enforcement flag as required by the application
 | |
|        and not depend on the default setting.
 | |
| <a name="pragma_freelist_count"></a>
 | |
| <h _id=pragma_freelist_count style="display:none"> PRAGMA freelist_count</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>freelist_count;</b></p>
 | |
|     <p>Return the number of unused pages in the database file.</p>
 | |
| <a name="pragma_full_column_names"></a>
 | |
| <h _id=pragma_full_column_names style="display:none"> PRAGMA full_column_names</h><hr>
 | |
|     <p><b>PRAGMA full_column_names;
 | |
|        <br>PRAGMA full_column_names = </b><i>boolean</i><b>;</b></p>
 | |
| 
 | |
|     <p>Query or change the full_column_names flag. This flag together 
 | |
|     with the <a href="pragma.html#pragma_short_column_names">short_column_names</a> flag determine
 | |
|     the way SQLite assigns names to result columns of <a href="lang_select.html">SELECT</a> statements.
 | |
|     Result columns are named by applying the following rules in order:
 | |
|     <ol>
 | |
|     <li><p>If there is an AS clause on the result, then the name of
 | |
|         the column is the right-hand side of the AS clause.</p></li>
 | |
|     <li><p>If the result is a general expression, not a just the name of
 | |
|         a source table column,
 | |
|         then the name of the result is a copy of the expression text.</p></li>
 | |
|     <li><p>If the <a href="pragma.html#pragma_short_column_names">short_column_names</a> pragma is ON, then the name of the
 | |
|         result is the name of the source table column without the 
 | |
|         source table name prefix:  COLUMN.</p></li>
 | |
|     <li><p>If both pragmas <a href="pragma.html#pragma_short_column_names">short_column_names</a> and <a href="pragma.html#pragma_full_column_names">full_column_names</a>
 | |
|         are OFF then case (2) applies.
 | |
|         </p></li>
 | |
|     <li><p>The name of the result column is a combination of the source table
 | |
|         and source column name:  TABLE.COLUMN</p></li>
 | |
|     </ol>
 | |
| 
 | |
|     
 | |
|     <p style='background-color: #ffd0d0;'>
 | |
|     <b>This pragma is deprecated</b> and exists
 | |
|     for backwards compatibility only.  New applications
 | |
|     should avoid using this pragma.  Older applications should discontinue
 | |
|     use of this pragma at the earliest opportunity.  This pragma may be omitted
 | |
|     from the build when SQLite is compiled using <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a>.
 | |
|     </p>
 | |
|   
 | |
| <a name="pragma_fullfsync"></a>
 | |
| <h _id=pragma_fullfsync style="display:none"> PRAGMA fullfsync</h><hr>
 | |
|     <p><b>PRAGMA fullfsync
 | |
|        <br>PRAGMA fullfsync = </b><i>boolean</i><b>;</b></p>
 | |
|     <p>Query or change the fullfsync flag. This flag
 | |
|     determines whether or not the F_FULLFSYNC syncing method is used
 | |
|     on systems that support it.  The default value of the fullfsync flag
 | |
|     is off.  Only Mac OS X supports F_FULLFSYNC.</p>
 | |
| 
 | |
|     <p>See also <a href="pragma.html#pragma_checkpoint_fullfsync">checkpoint_fullfsync</a>.</p>
 | |
| <a name="pragma_function_list"></a>
 | |
| <h _id=pragma_function_list style="display:none"> PRAGMA function_list</h><hr>
 | |
|     <p><b>PRAGMA function_list;</b>
 | |
|     <p>This pragma returns a list of SQL functions
 | |
|     known to the database connection.  Each row of the result
 | |
|     describes a single calling signature for a single SQL function.
 | |
|     Some SQL functions will have multiple rows in the result set
 | |
|     if they can (for example) be invoked with a varying number of
 | |
|     arguments or can accept text in various encodings.
 | |
| <a name="pragma_hard_heap_limit"></a>
 | |
| <h _id=pragma_hard_heap_limit style="display:none"> PRAGMA hard_heap_limit</h><hr>
 | |
|     <p><b>PRAGMA hard_heap_limit<br>
 | |
|           PRAGMA hard_heap_limit=</b><i>N</i></p>
 | |
| 
 | |
|     <p>This pragma invokes the <a href="c3ref/hard_heap_limit64.html">sqlite3_hard_heap_limit64()</a> interface with
 | |
|     the argument N, if N is specified and N is a positive integer that
 | |
|     is less than the current hard heap limit.
 | |
|     The hard_heap_limit pragma always returns the same integer
 | |
|     that would be returned by the <a href="c3ref/hard_heap_limit64.html">sqlite3_hard_heap_limit64</a>(-1) C-language
 | |
|     function.  That is to say, it always returns the value of the hard
 | |
|     heap limit that is set after any changes imposed by this PRAGMA.
 | |
|     </p>
 | |
| 
 | |
|     <p>This pragma can only lower the heap limit, never raise it.
 | |
|     The C-language interface <a href="c3ref/hard_heap_limit64.html">sqlite3_hard_heap_limit64()</a> must be used
 | |
|     to raise the heap limit.</p>
 | |
| 
 | |
|     <p>See also the <a href="pragma.html#pragma_soft_heap_limit">soft_heap_limit pragma</a>.
 | |
| <a name="pragma_ignore_check_constraints"></a>
 | |
| <h _id=pragma_ignore_check_constraints style="display:none"> PRAGMA ignore_check_constraints</h><hr>
 | |
|     <p><b>PRAGMA ignore_check_constraints  = </b><i>boolean</i><b>;</b></p>
 | |
| 
 | |
|     <p>This pragma enables or disables the enforcement of CHECK constraints.
 | |
|     The default setting is off, meaning that CHECK constraints are
 | |
|     enforced by default.</p>
 | |
| <a name="pragma_incremental_vacuum"></a>
 | |
| <h _id=pragma_incremental_vacuum style="display:none"> PRAGMA incremental_vacuum</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>incremental_vacuum</b><i>(N)</i><b>;<br>
 | |
|       PRAGMA </b><i>schema.</i><b>incremental_vacuum;</b></p>
 | |
|     <p>The incremental_vacuum pragma causes up to <i>N</i> pages to
 | |
|     be removed from the <a href="fileformat2.html#freelist">freelist</a>.  The database file is truncated by
 | |
|     the same amount.  The incremental_vacuum pragma has no effect if
 | |
|     the database is not in
 | |
|     <a href="#pragma_auto_vacuum">auto_vacuum=incremental</a> mode
 | |
|     or if there are no pages on the freelist.  If there are fewer than
 | |
|     <i>N</i> pages on the freelist, or if <i>N</i> is less than 1, or
 | |
|     if the "(<i>N</i>)" argument is omitted, then the entire
 | |
|     freelist is cleared.</p>
 | |
| <a name="pragma_index_info"></a>
 | |
| <h _id=pragma_index_info style="display:none"> PRAGMA index_info</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>index_info(</b><i>index-name</i><b>);</b></p>
 | |
|     <p>This pragma returns one row for each key column in the named index.
 | |
|     A key column is a column that is actually named in the <a href="lang_createindex.html">CREATE INDEX</a>
 | |
|     index statement or <a href="lang_createtable.html#uniqueconst">UNIQUE constraint</a> or <a href="lang_createtable.html#primkeyconst">PRIMARY KEY constraint</a> that
 | |
|     created the index.  Index entries also usually contain auxiliary
 | |
|     columns that point back to the table row being indexed.  The auxiliary
 | |
|     index-columns are not shown by the index_info pragma, but they are
 | |
|     listed by the <a href="pragma.html#pragma_index_xinfo">index_xinfo pragma</a>.</p>
 | |
| 
 | |
|     <p>Output columns from the index_info pragma are as follows:
 | |
|     <ol>
 | |
|     <li>The rank of the column within the index.  (0 means left-most.)
 | |
|     <li>The rank of the column within the table being indexed.
 | |
|         A value of -1 means <a href="lang_createtable.html#rowid">rowid</a> and a value of -2 means that an
 | |
|         <a href="expridx.html">expression</a> is being used.
 | |
|     <li>The name of the column being indexed.  This columns is NULL
 | |
|         if the column is the <a href="lang_createtable.html#rowid">rowid</a> or an <a href="expridx.html">expression</a>.
 | |
|     </ol>
 | |
| 
 | |
|     <p>If there is no index named <i>index-name</i> but there is a
 | |
|     <a href="withoutrowid.html">WITHOUT ROWID</a> table with that name, then (as of
 | |
|     SQLite <a href="releaselog/3_30_0.html">version 3.30.0</a> on 2019-10-04) this pragma returns the
 | |
|     PRIMARY KEY columns of the WITHOUT ROWID table as they are used
 | |
|     in the records of the underlying b-tree, which is to say with
 | |
|     duplicate columns removed.
 | |
| <a name="pragma_index_list"></a>
 | |
| <h _id=pragma_index_list style="display:none"> PRAGMA index_list</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>index_list(</b><i>table-name</i><b>);</b></p>
 | |
|     <p>This pragma returns one row for each index associated with the
 | |
|     given table.
 | |
|     <p>Output columns from the index_list pragma are as follows:
 | |
|     <ol>
 | |
|     <li>A sequence number assigned to each index for internal tracking
 | |
|           purposes.
 | |
|     <li>The name of the index.
 | |
|     <li>"1" if the index is UNIQUE and "0" if not.
 | |
|     <li>"c" if the index was created by a <a href="lang_createindex.html">CREATE INDEX</a> statement,
 | |
|           "u" if the index was created by a <a href="lang_createtable.html#uniqueconst">UNIQUE constraint</a>, or
 | |
|           "pk" if the index was created by a <a href="lang_createtable.html#primkeyconst">PRIMARY KEY constraint</a>.
 | |
|     <li>"1" if the index is a <a href="partialindex.html">partial index</a> and "0" if not.
 | |
|     </ol>
 | |
|     </p>
 | |
| <a name="pragma_index_xinfo"></a>
 | |
| <h _id=pragma_index_xinfo style="display:none"> PRAGMA index_xinfo</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>index_xinfo(</b><i>index-name</i><b>);</b></p>
 | |
|     <p>This pragma returns information about every column in an index.
 | |
|     Unlike this <a href="pragma.html#pragma_index_info">index_info pragma</a>, this pragma returns information about
 | |
|     every column in the index, not just the key columns.
 | |
|     (A key column is a column that is actually named in the <a href="lang_createindex.html">CREATE INDEX</a>
 | |
|     index statement or <a href="lang_createtable.html#uniqueconst">UNIQUE constraint</a> or <a href="lang_createtable.html#primkeyconst">PRIMARY KEY constraint</a> that
 | |
|     created the index.  Auxiliary columns are additional columns needed to
 | |
|     locate the table entry that corresponds to each index entry.)
 | |
| 
 | |
|     <p>Output columns from the index_xinfo pragma are as follows:
 | |
|     <ol>
 | |
|     <li>The rank of the column within the index. (0 means left-most.
 | |
|          Key columns come before auxiliary columns.)
 | |
|     <li>The rank of the column within the table being indexed, or -1 if
 | |
|          the index-column is the <a href="lang_createtable.html#rowid">rowid</a> of the table being indexed and -2
 | |
|          if the <a href="expridx.html">index is on an expression</a>.
 | |
|     <li>The name of the column being indexed, or NULL if the index-column
 | |
|          is the <a href="lang_createtable.html#rowid">rowid</a> of the table being indexed or an
 | |
|          <a href="expridx.html">expression</a>.
 | |
|     <li>1 if the index-column is sorted in reverse (DESC) order by the
 | |
|          index and 0 otherwise.
 | |
|     <li>The name for the <a href="datatype3.html#collation">collating sequence</a>
 | |
|          used to compare values in the index-column.
 | |
|     <li>1 if the index-column is a key column and 0 if the index-column
 | |
|          is an auxiliary column.
 | |
|     </ol>
 | |
| 
 | |
|     <p>If there is no index named <i>index-name</i> but there is a
 | |
|     <a href="withoutrowid.html">WITHOUT ROWID</a> table with that name, then (as of
 | |
|     SQLite <a href="releaselog/3_30_0.html">version 3.30.0</a> on 2019-10-04) this pragma returns the
 | |
|     columns of the WITHOUT ROWID table as they are used
 | |
|     in the records of the underlying b-tree, which is to say with
 | |
|     de-duplicated PRIMARY KEY columns first followed by data columns.
 | |
| <a name="pragma_integrity_check"></a>
 | |
| <h _id=pragma_integrity_check style="display:none"> PRAGMA integrity_check</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>integrity_check;
 | |
|       <br>PRAGMA </b><i>schema.</i><b>integrity_check(</b><i>N</i><b>)
 | |
|       <br>PRAGMA </b><i>schema.</i><b>integrity_check(</b><i>TABLENAME</i><b>)</b></p>
 | |
|     <p>This pragma does a low-level formatting and consistency check
 | |
|     of the database.  The integrity_check pragma look for:
 | |
|     <ul>
 | |
|     <li> Table or index entries that are out of sequence
 | |
|     <li> Misformatted records
 | |
|     <li> Missing pages
 | |
|     <li> Missing or surplus index entries
 | |
|     <li> UNIQUE, CHECK, and NOT NULL constraint errors
 | |
|     <li> Integrity of the freelist
 | |
|     <li> Sections of the database that are used more than once, or not at all
 | |
|     </ul>
 | |
|     <p>If the integrity_check pragma finds problems, strings are returned
 | |
|     (as multiple rows with a single column per row) which describe
 | |
|     the problems.  Pragma integrity_check will return at most <i>N</i>
 | |
|     errors before the analysis quits, with N defaulting
 | |
|     to 100.  If pragma integrity_check finds no errors, a
 | |
|     single row with the value 'ok' is returned.</p>
 | |
| 
 | |
|     <p>The usual case is that the entire database file is checked.  However,
 | |
|     if the argument is <i>TABLENAME</i>, then checking is only performed for the
 | |
|     the table named and its associated indexes.
 | |
|     This is called a "partial integrity check".  Because only a subset of the
 | |
|     database is checked, errors such as unused sections of the file or duplication
 | |
|     use of the same section of the file by two or more tables cannot be detected.
 | |
|     The freelist is only verified on a
 | |
|     partial integrity check if <i>TABLENAME</i> is <a href="schematab.html">sqlite_schema</a> or one of its
 | |
|     aliases.  Support for partial integrity checks was added with
 | |
|     version 3.33.0 (2020-08-14).
 | |
| 
 | |
|     <p>PRAGMA integrity_check does not find
 | |
|     <a href="foreignkeys.html">FOREIGN KEY</a> errors.  
 | |
|     Use the <a href="pragma.html#pragma_foreign_key_check">PRAGMA foreign_key_check</a> command to find errors in
 | |
|     FOREIGN KEY constraints.</p>
 | |
| 
 | |
|     <p>See also the <a href="pragma.html#pragma_quick_check">PRAGMA quick_check</a> command which does most of the
 | |
|     checking of PRAGMA integrity_check but runs much faster.</p>
 | |
| <a name="pragma_journal_mode"></a>
 | |
| <h _id=pragma_journal_mode style="display:none"> PRAGMA journal_mode</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>journal_mode;
 | |
|         <br>PRAGMA </b><i>schema.</i><b>journal_mode
 | |
|               = <i>DELETE | TRUNCATE | PERSIST | MEMORY | WAL | OFF</i></b></p>
 | |
| 
 | |
|     <p>This pragma queries or sets the journal mode for databases
 | |
|     associated with the current <a href="c3ref/sqlite3.html">database connection</a>.</p>
 | |
| 
 | |
|     <p>The first form of this pragma queries the current journaling
 | |
|     mode for <i>database</i>.  When <i>database</i> is omitted, the
 | |
|     "main" database is queried.</p>
 | |
| 
 | |
|     <p>The second form changes the journaling mode for "<i>database</i>"
 | |
|     or for all attached databases if "<i>database</i>" is omitted.
 | |
|     The new journal mode is returned.  If the journal mode
 | |
|     could not be changed, the original journal mode is returned.</p>
 | |
| 
 | |
|     <p>The DELETE journaling mode is the normal behavior.  In the DELETE
 | |
|     mode, the rollback journal is deleted at the conclusion of each
 | |
|     transaction.  Indeed, the delete operation is the action that causes
 | |
|     the transaction to commit.
 | |
|     (See the document titled <a href="atomiccommit.html">
 | |
|     Atomic Commit In SQLite</a> for additional detail.)</p>
 | |
| 
 | |
|     <p>The TRUNCATE journaling mode commits transactions by truncating
 | |
|     the rollback journal to zero-length instead of deleting it.  On many
 | |
|     systems, truncating a file is much faster than deleting the file since
 | |
|     the containing directory does not need to be changed.</p>
 | |
| 
 | |
|     <p>The PERSIST journaling mode prevents the rollback journal from
 | |
|     being deleted at the end of each transaction.  Instead, the header
 | |
|     of the journal is overwritten with zeros.  This will prevent other
 | |
|     database connections from rolling the journal back.  The PERSIST
 | |
|     journaling mode is useful as an optimization on platforms where
 | |
|     deleting or truncating a file is much more expensive than overwriting
 | |
|     the first block of a file with zeros.  See also:
 | |
|     <a href="pragma.html#pragma_journal_size_limit">PRAGMA journal_size_limit</a> and <a href="compile.html#default_journal_size_limit">SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT</a>.</p>
 | |
| 
 | |
|     <p>The MEMORY journaling mode stores the rollback journal in 
 | |
|     volatile RAM.  This saves disk I/O but at the expense of database
 | |
|     safety and integrity.  If the application using SQLite crashes in
 | |
|     the middle of a transaction when the MEMORY journaling mode is set,
 | |
|     then the database file will very likely 
 | |
|     <a href="howtocorrupt.html#cfgerr">go corrupt</a>.</p>
 | |
| 
 | |
|     <p>The WAL journaling mode uses a <a href="wal.html">write-ahead log</a> instead of a
 | |
|     rollback journal to implement transactions.  The WAL journaling mode
 | |
|     is persistent; after being set it stays in effect
 | |
|     across multiple database connections and after closing and
 | |
|     reopening the database.  A database in WAL journaling mode
 | |
|     can only be accessed by SQLite <a href="releaselog/3_7_0.html">version 3.7.0</a> (2010-07-21)
 | |
|     or later.</p>
 | |
| 
 | |
|     <p>The OFF journaling mode disables the rollback journal completely.
 | |
|     No rollback journal is ever created and hence there is never a rollback
 | |
|     journal to delete.  The OFF journaling mode disables the atomic
 | |
|     commit and rollback capabilities of SQLite. The <a href="lang_transaction.html">ROLLBACK</a> command
 | |
|     no longer works; it behaves in an undefined way.  Applications must
 | |
|     avoid using the <a href="lang_transaction.html">ROLLBACK</a> command when the journal mode is OFF.
 | |
|     If the application crashes
 | |
|     in the middle of a transaction when the OFF journaling mode is
 | |
|     set, then the database file will very likely
 | |
|     <a href="howtocorrupt.html#cfgerr">go corrupt</a>. Without a journal, there is no way for
 | |
|     a statement to unwind partially completed operations following
 | |
|     a constraint error.  This might also leave the database in a corrupted
 | |
|     state.  For example, if a duplicate entry causes a 
 | |
|     <a href="lang_createindex.html">CREATE UNIQUE INDEX</a> statement to fail half-way through,
 | |
|     it will leave behind a partially created, and hence corrupt, index.
 | |
|     Because OFF journaling
 | |
|     mode allows the database file to be corrupted using ordinary SQL,
 | |
|     it is disabled when <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> is enabled.</p>
 | |
| 
 | |
|     <p>Note that the journal_mode for an <a href="inmemorydb.html">in-memory database</a>
 | |
|     is either MEMORY or OFF and can not be changed to a different value.
 | |
|     An attempt to change the journal_mode of an <a href="inmemorydb.html">in-memory database</a> to
 | |
|     any setting other than MEMORY or OFF is ignored.  Note also that
 | |
|     the journal_mode cannot be changed while a transaction is active.</p>
 | |
| <a name="pragma_journal_size_limit"></a>
 | |
| <h _id=pragma_journal_size_limit style="display:none"> PRAGMA journal_size_limit</h><hr>
 | |
|     <p><b>
 | |
|     PRAGMA </b><i>schema.</i><b>journal_size_limit<br>
 | |
|     PRAGMA </b><i>schema.</i><b>journal_size_limit = </b><i>N</i> <b>;</b>
 | |
| 
 | |
|   <p>If a database connection is operating in
 | |
|   <a href="pragma.html#pragma_locking_mode">exclusive locking mode</a> or in
 | |
|   <a href="pragma.html#pragma_journal_mode">persistent journal mode</a> 
 | |
|   (PRAGMA journal_mode=persist) then
 | |
|   after committing a transaction the <a href="lockingv3.html#rollback">rollback journal</a> file may remain in
 | |
|   the file-system. This increases performance for subsequent transactions
 | |
|   since overwriting an existing file is faster than append to a file,
 | |
|   but it also consumes
 | |
|   file-system space. After a large transaction (e.g. a <a href="lang_vacuum.html">VACUUM</a>),
 | |
|   the rollback journal file may consume a very large amount of space.
 | |
| 
 | |
|   <p>Similarly, in <a href="wal.html">WAL mode</a>, the write-ahead log file is not truncated
 | |
|   following a <a href="wal.html#ckpt">checkpoint</a>.  Instead, SQLite reuses the existing file
 | |
|   for subsequent WAL entries since overwriting is faster than appending.
 | |
| 
 | |
|   <p>The journal_size_limit pragma may be used to limit the size of 
 | |
|   rollback-journal and WAL files left
 | |
|   in the file-system after transactions or checkpoints.
 | |
|   Each time a transaction is committed or a WAL file resets, SQLite 
 | |
|   compares the size of the rollback journal file or WAL file left in 
 | |
|   the file-system to the size limit
 | |
|   set by this pragma and if the journal or WAL file is larger 
 | |
|   it is truncated to the limit.
 | |
| 
 | |
|   <p>The second form of the pragma listed above is used to set a new limit
 | |
|   in bytes for the specified database.  A negative number implies no limit.
 | |
|   To always truncate rollback journals and WAL files to their minimum size, 
 | |
|   set the journal_size_limit to zero.
 | |
|   Both the first and second forms of the pragma listed above return a single
 | |
|   result row containing a single integer column - the value of the journal
 | |
|   size limit in bytes. The default journal size limit is -1 (no limit).  The
 | |
|   <a href="compile.html#default_journal_size_limit">SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT</a> preprocessor macro can be used to change
 | |
|   the default journal size limit at compile-time.</p>
 | |
| 
 | |
|   <p>This pragma only operates on the single database specified prior
 | |
|   to the pragma name (or on the "main" database if no database is specified.)
 | |
|   There is no way to change the journal size limit on all attached databases
 | |
|   using a single PRAGMA statement.  The size limit must be set separately for
 | |
|   each attached database.
 | |
| <a name="pragma_legacy_alter_table"></a>
 | |
| <h _id=pragma_legacy_alter_table style="display:none"> PRAGMA legacy_alter_table</h><hr>
 | |
|    <p><b>PRAGMA legacy_alter_table;
 | |
|        <br>PRAGMA legacy_alter_table = <i>boolean</i></b></p>
 | |
|     <p>This pragma sets or queries the value of the legacy_alter_table
 | |
|     flag.  When this flag is on, the <a href="lang_altertable.html#altertabrename">ALTER TABLE RENAME</a>
 | |
|     command (for changing the name of a table) works as it did
 | |
|     in SQLite 3.24.0 (2018-06-04) and earlier.  More specifically,
 | |
|     when this flag is on
 | |
|     the <a href="lang_altertable.html#altertabrename">ALTER TABLE RENAME</a> command only rewrites the initial occurrence
 | |
|     of the table name in its <a href="lang_createtable.html">CREATE TABLE</a> statement and in any associated
 | |
|     <a href="lang_createindex.html">CREATE INDEX</a> and <a href="lang_createtrigger.html">CREATE TRIGGER</a> statements.  Other references to the
 | |
|     table are unmodified, including:
 | |
|     <ul>
 | |
|     <li> References to the table within the bodies of triggers and views.
 | |
|     <li> References to the table within CHECK constraints in the original
 | |
|          CREATE TABLE statement.
 | |
|     <li> References to the table within the WHERE clauses of <a href="partialindex.html">partial indexes</a>.
 | |
|     </ul>
 | |
|     The default setting for this pragma is OFF, which means that all
 | |
|     references to the table anywhere in the schema are converted to the new name.
 | |
|     <p>This pragma is provided as a work-around for older programs that
 | |
|     contain code that expect the incomplete behavior
 | |
|     of <a href="lang_altertable.html#altertabrename">ALTER TABLE RENAME</a> found in older versions of SQLite.
 | |
|     New applications should leave this flag turned off.
 | |
|     <p>For compatibility with older <a href="vtab.html">virtual table</a> implementations,
 | |
|     this flag is turned on temporarily while the <a href="vtab.html#xrename">sqlite3_module.xRename</a>
 | |
|     method is being run.  The value of this flag is restore after the 
 | |
|     <a href="vtab.html#xrename">sqlite3_module.xRename</a> method finishes.
 | |
|     <p>The legacy alter table behavior can also be toggled on and off
 | |
|     using the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyaltertable">SQLITE_DBCONFIG_LEGACY_ALTER_TABLE</a> option to the
 | |
|     <a href="c3ref/db_config.html">sqlite3_db_config()</a> interface.
 | |
|     <p>The legacy alter table behavior is a per-connection setting.  Turning
 | |
|     this features on or off affects all attached database files within the
 | |
|     <a href="c3ref/sqlite3.html">database connection</a>.
 | |
|     The setting does not persist.  Changing this setting in one connection
 | |
|     does not affect any other connections.
 | |
| <a name="pragma_legacy_file_format"></a>
 | |
| <h _id=pragma_legacy_file_format style="display:none"> PRAGMA legacy_file_format</h><hr>
 | |
|    <p><b>PRAGMA legacy_file_format;</b>
 | |
|     <p>This pragma no longer functions.  It has become a no-op.
 | |
|     The capabilities formerly provided by PRAGMA legacy_file_format
 | |
|     are now available using the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfiglegacyfileformat">SQLITE_DBCONFIG_LEGACY_FILE_FORMAT</a>
 | |
|     option to the <a href="c3ref/db_config.html">sqlite3_db_config()</a> C-language interface.
 | |
|     <p>
 | |
| <a name="pragma_locking_mode"></a>
 | |
| <h _id=pragma_locking_mode style="display:none"> PRAGMA locking_mode</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>locking_mode;
 | |
|     <br>PRAGMA </b><i>schema.</i><b>locking_mode
 | |
|                 = <i>NORMAL | EXCLUSIVE</i></b></p>
 | |
|     <p>This pragma sets or queries the database connection locking-mode. 
 | |
|     The locking-mode is either NORMAL or EXCLUSIVE.
 | |
| 
 | |
|     <p>In NORMAL locking-mode (the default unless overridden at compile-time
 | |
|     using <a href="compile.html#default_locking_mode">SQLITE_DEFAULT_LOCKING_MODE</a>), a database connection
 | |
|     unlocks the database file at the conclusion of each read or
 | |
|     write transaction. When the locking-mode is set to EXCLUSIVE, the
 | |
|     database connection never releases file-locks. The first time the
 | |
|     database is read in EXCLUSIVE mode, a shared lock is obtained and 
 | |
|     held. The first time the database is written, an exclusive lock is
 | |
|     obtained and held.</p>
 | |
| 
 | |
|     <p>Database locks obtained by a connection in EXCLUSIVE mode may be
 | |
|     released either by closing the database connection, or by setting the
 | |
|     locking-mode back to NORMAL using this pragma and then accessing the
 | |
|     database file (for read or write). Simply setting the locking-mode to
 | |
|     NORMAL is not enough - locks are not released until the next time
 | |
|     the database file is accessed.</p>
 | |
| 
 | |
|     <p>There are three reasons to set the locking-mode to EXCLUSIVE.
 | |
|     <ol>
 | |
|     <li>The application wants to prevent other processes from
 | |
|         accessing the database file.
 | |
|     <li>The number of system calls for filesystem operations is reduced,
 | |
|         possibly resulting in a small performance increase.
 | |
|     <li><a href="wal.html">WAL</a> databases can be accessed in EXCLUSIVE mode without the
 | |
|         use of shared memory. 
 | |
|         (<a href="wal.html#noshm">Additional information</a>)
 | |
|     </ol>
 | |
|     </p>
 | |
| 
 | |
|     <p>When the locking_mode pragma specifies a particular database,
 | |
|     for example:</p>
 | |
| 
 | |
|     <blockquote>
 | |
| PRAGMA <b>main.</b>locking_mode=EXCLUSIVE;
 | |
|     </blockquote>
 | |
| 
 | |
|     <p>Then the locking mode applies only to the named database.  If no
 | |
|     database name qualifier precedes the "locking_mode" keyword then
 | |
|     the locking mode is applied to all databases, including any new
 | |
|     databases added by subsequent <a href="lang_attach.html">ATTACH</a> commands.</p>
 | |
| 
 | |
|    <p>The "temp" database (in which TEMP tables and indices are stored)
 | |
|    and <a href="inmemorydb.html">in-memory databases</a>
 | |
|    always uses exclusive locking mode.  The locking mode of temp and
 | |
|    <a href="inmemorydb.html">in-memory databases</a> cannot
 | |
|    be changed.  All other databases use the normal locking mode by default
 | |
|    and are affected by this pragma.</p>
 | |
| 
 | |
|    <p>If the locking mode is EXCLUSIVE when first entering
 | |
|    <a href="wal.html">WAL journal mode</a>, then the locking mode cannot be changed to
 | |
|    NORMAL until after exiting WAL journal mode. 
 | |
|    If the locking mode is NORMAL when first entering WAL
 | |
|    journal mode, then the locking mode can be changed between NORMAL and
 | |
|    EXCLUSIVE and back again at any time and without needing to exit
 | |
|    WAL journal mode.</p>
 | |
| <a name="pragma_max_page_count"></a>
 | |
| <h _id=pragma_max_page_count style="display:none"> PRAGMA max_page_count</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>max_page_count;
 | |
|         <br>PRAGMA </b><i>schema.</i><b>max_page_count = </b><i>N</i><b>;</b></p>
 | |
|     <p>Query or set the maximum number of pages in the database file.
 | |
|     Both forms of the pragma return the maximum page count.  The second
 | |
|     form attempts to modify the maximum page count.  The maximum page
 | |
|     count cannot be reduced below the current database size.
 | |
|     </p>
 | |
| <a name="pragma_mmap_size"></a>
 | |
| <h _id=pragma_mmap_size style="display:none"> PRAGMA mmap_size</h><hr>
 | |
|     <p><br><b>PRAGMA </b><i>schema.</i><b>mmap_size;
 | |
|          <br>PRAGMA </b><i>schema.</i><b>mmap_size=</b><i>N</i></p>
 | |
| 
 | |
|     <p>Query or change the maximum number of bytes that are set
 | |
|        aside for memory-mapped I/O on a single database.  The first form
 | |
|        (without an argument) queries the current limit.  The second
 | |
|        form (with a numeric argument) sets the limit for the specified
 | |
|        database, or for all databases if the optional database name is
 | |
|        omitted.  In the second form, if the database name is omitted, the
 | |
|        limit that is set becomes the default limit for all databases that
 | |
|        are added to the <a href="c3ref/sqlite3.html">database connection</a> by subsequent <a href="lang_attach.html">ATTACH</a>
 | |
|        statements.</p>
 | |
| 
 | |
|     <p>The argument N is the maximum number of bytes of the database file
 | |
|        that will be accessed using memory-mapped I/O.  If N is zero then
 | |
|        memory mapped I/O is disabled.  If N is negative, then the limit
 | |
|        reverts to the default value determined by the most recent
 | |
|        <a href="c3ref/config.html">sqlite3_config</a>(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">SQLITE_CONFIG_MMAP_SIZE</a>), or to the compile
 | |
|        time default determined by <a href="compile.html#default_mmap_size">SQLITE_DEFAULT_MMAP_SIZE</a> if not
 | |
|        start-time limit has been set.</p>
 | |
| 
 | |
|     <p>The <a href="pragma.html#pragma_mmap_size">PRAGMA mmap_size</a> statement will never increase the amount
 | |
|        of address space used for memory-mapped I/O above the
 | |
|        hard limit set by the <a href="compile.html#max_mmap_size">SQLITE_MAX_MMAP_SIZE</a> compile-time option,
 | |
|        nor the hard limit set start-time by the second argument to
 | |
|        sqlite3_config(<a href="c3ref/c_config_covering_index_scan.html#sqliteconfigmmapsize">SQLITE_CONFIG_MMAP_SIZE</a>)</p>
 | |
| 
 | |
|     <p>The size of the memory-mapped I/O region cannot be changed while
 | |
|        the memory-mapped I/O region is in active use, to avoid unmapping
 | |
|        memory out from under running SQL statements.  For this reason,
 | |
|        the mmap_size pragma may be a no-op if the prior mmap_size is non-zero
 | |
|        and there are other SQL statements running concurrently on the same
 | |
|        <a href="c3ref/sqlite3.html">database connection</a>.</p>
 | |
| <a name="pragma_module_list"></a>
 | |
| <h _id=pragma_module_list style="display:none"> PRAGMA module_list</h><hr>
 | |
|     <p><b>PRAGMA module_list;</b>
 | |
|     <p>This pragma returns a list of 
 | |
|     <a href="vtab.html">virtual table</a> modules registered with the database connection.
 | |
| <a name="pragma_optimize"></a>
 | |
| <h _id=pragma_optimize style="display:none"> PRAGMA optimize</h><hr>
 | |
|   <p><b>PRAGMA optimize;
 | |
|        <br>PRAGMA optimize(</b><i>MASK</i><b>);
 | |
|        <br>PRAGMA </b><i>schema</i><b>.optimize;
 | |
|        <br>PRAGMA </b><i>schema</i><b>.optimize(</b><i>MASK</i><b>);</b></p>
 | |
|   <p>Attempt to optimize the database.  All schemas are optimized in the 
 | |
|   first two forms, and only the specified schema is optimized in the latter
 | |
|   two.</p>
 | |
|   <p>To achieve the best long-term query performance without the need to
 | |
|   do a detailed engineering analysis of the application schema and SQL,
 | |
|   it is recommended that applications run "PRAGMA optimize" (with no arguments)
 | |
|   just before closing each <a href="c3ref/sqlite3.html">database connection</a>.  Long-running applications
 | |
|   might also benefit from setting a timer to run "PRAGMA optimize" every
 | |
|   few hours.
 | |
|   </p>
 | |
|   <p>This pragma is usually a no-op or nearly so and is very fast.
 | |
|   However if SQLite feels
 | |
|   that performing database optimizations (such as running <a href="lang_analyze.html">ANALYZE</a>
 | |
|   or creating new indexes) will improve the performance of future queries, then
 | |
|   some database I/O may be done.  Applications that want to limit the amount
 | |
|   of work performed can set a timer that will invoke
 | |
|   <a href="c3ref/interrupt.html">sqlite3_interrupt()</a> if the pragma goes on for too long.
 | |
|   Or, since SQLite 3.32.0, the application can use 
 | |
|   <a href="pragma.html#pragma_analysis_limit">PRAGMA analysis_limit=<i>N</i></a> for some small
 | |
|   value of <i>N</i> (a few hundred or a few thousand) to limit the depth
 | |
|   of analyze.
 | |
|   </p>
 | |
|   <p>The details of optimizations performed by this pragma are expected
 | |
|   to change and improve over time.  Applications should anticipate that
 | |
|   this pragma will perform new optimizations in future releases.</p>
 | |
| 
 | |
|   <p>The optional MASK argument is a bitmask of optimizations to perform:
 | |
|   <ol>
 | |
|   <li value='1'><p>
 | |
|          Debugging mode.  Do not actually perform any optimizations
 | |
|          but instead return one line of text for each optimization
 | |
|          that would have been done.  Off by default.
 | |
|   <li value='2'><p>
 | |
|          Run <a href="lang_analyze.html">ANALYZE</a> on tables that might benefit.  On by default.
 | |
|          See below for additional information.
 | |
|   <li value='4'><p>
 | |
|          <em>(Not yet implemented)</em>
 | |
|          Record usage and performance 
 | |
|          information from the current session in the
 | |
|          database file so that it will be available to "optimize"
 | |
|          pragmas run by future database connections.
 | |
|   <li value='8'><p>
 | |
|          <em>(Not yet implemented)</em>
 | |
|          Create indexes that might have been helpful to recent queries.
 | |
|   </ol>
 | |
|   <p>The default MASK is and always shall be 0xfffe.  The 0xfffe mask means
 | |
|   perform all of the optimizations listed above except Debug Mode.  If new
 | |
|   optimizations are added in the future that should be off by default, those
 | |
|   new optimizations will be given a mask of 0x10000 or larger.</p>
 | |
| 
 | |
|   <p>To see all optimizations that would have been done without actually
 | |
|   doing them, run "PRAGMA optimize(-1)".  To use only the ANALYZE
 | |
|   optimization, run "PRAGMA optimize(0x02)".</p>
 | |
|   
 | |
|   <p><b>Determination Of When To Run Analyze</b></p>
 | |
|   <p> In the current implementation, a table is analyzed if and only if 
 | |
|       all of the following are true:
 | |
|   <ul>
 | |
|   <li><p>
 | |
|     MASK bit 0x02 is set.
 | |
|   <li><p>
 | |
|     The query planner used <a href="fileformat2.html#stat1tab">sqlite_stat1</a>-style statistics for one or
 | |
|     more indexes of the table at some point during the lifetime of
 | |
|     the current connection.
 | |
|   <li><p>
 | |
|     One or more indexes of the table are currently unanalyzed <em>or</em>
 | |
|     the number of rows in the table has increased by 25 times or more
 | |
|     since the last time ANALYZE was run.
 | |
|   </ul>
 | |
|   <p> The rules for when tables are analyzed are likely to change in
 | |
|       future releases.
 | |
| <a name="pragma_page_count"></a>
 | |
| <h _id=pragma_page_count style="display:none"> PRAGMA page_count</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>page_count;</b></p>
 | |
|     <p>Return the total number of pages in the database file.</p>
 | |
| <a name="pragma_page_size"></a>
 | |
| <h _id=pragma_page_size style="display:none"> PRAGMA page_size</h><hr>
 | |
|    <p><b>PRAGMA </b><i>schema.</i><b>page_size;
 | |
|        <br>PRAGMA </b><i>schema.</i><b>page_size = </b><i>bytes</i><b>;</b></p>
 | |
|     <p>Query or set the page size of the database. The page
 | |
|     size must be a power of two between 512 and 65536 inclusive.
 | |
|     </p>
 | |
| 
 | |
|     <p>When a new database is created, SQLite assigns a page size to
 | |
|     the database based on platform and filesystem.  For many years,
 | |
|     the default page size was almost always 1024 bytes, but beginning
 | |
|     with SQLite <a href="releaselog/3_12_0.html">version 3.12.0</a> (2016-03-29), 
 | |
|     the default page size increased to 4096.
 | |
|     The default page size is recommended for most applications.
 | |
| 
 | |
|     <p>Specifying a new page size does not change the page size
 | |
|     immediately.  Instead, the new page size is remembered and is used
 | |
|     to set the page size when the database is first created, if it does
 | |
|     not already exist when the page_size pragma is issued, or at the
 | |
|     next <a href="lang_vacuum.html">VACUUM</a> command that is run on the same database connection
 | |
|     while not in <a href="wal.html">WAL mode</a>.</p>
 | |
| 
 | |
|     <p>The <a href="compile.html#default_page_size">SQLITE_DEFAULT_PAGE_SIZE</a> compile-time option can be used
 | |
|     to change the default page size assigned to new databases.
 | |
| <a name="pragma_parser_trace"></a>
 | |
| <h _id=pragma_parser_trace style="display:none"> PRAGMA parser_trace</h><hr>
 | |
|     <p><b>PRAGMA parser_trace = </b><i>boolean</i><b>; </b></p>
 | |
| 
 | |
|     <p>If SQLite has been compiled with the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time
 | |
|     option, then the parser_trace pragma can be used to turn on tracing
 | |
|     for the SQL parser used internally by SQLite.
 | |
|     This feature is used for debugging SQLite itself.</p>
 | |
| 
 | |
|     
 | |
|     <p style='background-color: #f0e0ff;'>
 | |
|     This pragma is intended for use when debugging SQLite itself.  It
 | |
|     is only available when the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time option
 | |
|     is used.</p>
 | |
|   
 | |
| <a name="pragma_pragma_list"></a>
 | |
| <h _id=pragma_pragma_list style="display:none"> PRAGMA pragma_list</h><hr>
 | |
|     <p><b>PRAGMA pragma_list;</b>
 | |
|     <p>This pragma returns a list of PRAGMA commands
 | |
|     known to the database connection.
 | |
| <a name="pragma_query_only"></a>
 | |
| <h _id=pragma_query_only style="display:none"> PRAGMA query_only</h><hr>
 | |
|     <p><b>PRAGMA query_only;
 | |
|       <br>PRAGMA query_only = </b><i>boolean</i><b>;</b></p>
 | |
| 
 | |
|     <p>The query_only pragma prevents all changes to database files when
 | |
|     enabled.</p>
 | |
| <a name="pragma_quick_check"></a>
 | |
| <h _id=pragma_quick_check style="display:none"> PRAGMA quick_check</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>quick_check;
 | |
|       <br>PRAGMA </b><i>schema.</i><b>quick_check(</b><i>N</i><b>)</b>
 | |
|       <br>PRAGMA </b><i>schema.</i><b>quick_check(</b><i>TABLENAME</i><b>)</b></p>
 | |
|     <p>The pragma is like <a href="pragma.html#pragma_integrity_check">integrity_check</a> except that it does not verify
 | |
|     UNIQUE constraints and does not verify
 | |
|     that index content matches table content.  By skipping UNIQUE
 | |
|     and index consistency checks, quick_check is able to run faster.
 | |
|     PRAGMA quick_check runs in O(N) time whereas <a href="pragma.html#pragma_integrity_check">PRAGMA integrity_check</a>
 | |
|     requires O(NlogN) time where N is the total number of rows in the 
 | |
|     database. Otherwise the two pragmas are the same.
 | |
|     </p>
 | |
| <a name="pragma_read_uncommitted"></a>
 | |
| <h _id=pragma_read_uncommitted style="display:none"> PRAGMA read_uncommitted</h><hr>
 | |
|     <p><b>PRAGMA read_uncommitted;
 | |
|        <br>PRAGMA read_uncommitted = </b><i>boolean</i><b>;</b></p>
 | |
|     <p>Query, set, or clear READ UNCOMMITTED isolation. The default isolation
 | |
|     level for SQLite is SERIALIZABLE.  Any process or thread can select
 | |
|     READ UNCOMMITTED isolation, but SERIALIZABLE will still be used except
 | |
|     between connections that share a common page and schema cache.
 | |
|     Cache sharing is enabled using the <a href="c3ref/enable_shared_cache.html">sqlite3_enable_shared_cache()</a> API.
 | |
|     Cache sharing is disabled by default.
 | |
|     </p>
 | |
| 
 | |
|     <p>See <a href="sharedcache.html">SQLite Shared-Cache Mode</a> for additional information.</p>
 | |
| <a name="pragma_recursive_triggers"></a>
 | |
| <h _id=pragma_recursive_triggers style="display:none"> PRAGMA recursive_triggers</h><hr>
 | |
|     <p><b>PRAGMA recursive_triggers;
 | |
|        <br>PRAGMA recursive_triggers = </b><i>boolean</i><b>;</b></p>
 | |
|     <p>Query, set, or clear the recursive trigger capability.
 | |
| 
 | |
|     <p>Changing the recursive_triggers setting affects the execution of
 | |
|        all statements prepared
 | |
|        using the database connection, including those prepared before the
 | |
|        setting was changed. Any existing statements prepared using the legacy 
 | |
|        <a href="c3ref/prepare.html">sqlite3_prepare()</a> interface may fail with an <a href="rescode.html#schema">SQLITE_SCHEMA</a> error
 | |
|        after the recursive_triggers setting is changed.
 | |
| 
 | |
|     <p>Prior to SQLite <a href="releaselog/3_6_18.html">version 3.6.18</a> (2009-09-11), 
 | |
|     recursive triggers were not supported.
 | |
|     The behavior of SQLite was always as if this pragma was
 | |
|     set to OFF.  Support for recursive triggers was added in version 3.6.18
 | |
|     but was initially turned OFF by default, for compatibility.  Recursive
 | |
|     triggers may be turned on by default in future versions of SQLite.
 | |
|     </p>
 | |
| 
 | |
|     <p>The depth of recursion for triggers has a hard upper limit set by
 | |
|     the <a href="limits.html#max_trigger_depth">SQLITE_MAX_TRIGGER_DEPTH</a> compile-time option and a run-time
 | |
|     limit set by <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimittriggerdepth">SQLITE_LIMIT_TRIGGER_DEPTH</a>,...).</p>
 | |
| <a name="pragma_reverse_unordered_selects"></a>
 | |
| <h _id=pragma_reverse_unordered_selects style="display:none"> PRAGMA reverse_unordered_selects</h><hr>
 | |
|     <p><b>PRAGMA reverse_unordered_selects;
 | |
|        <br>PRAGMA reverse_unordered_selects = </b><i>boolean</i><b>;</b></p>
 | |
|     <p>When enabled, this PRAGMA causes many <a href="lang_select.html">SELECT</a> statements without
 | |
|     an ORDER BY clause to emit their results in the reverse order from what
 | |
|     they normally would.  This can help debug applications that are
 | |
|     making invalid assumptions about the result order.  
 | |
|     The reverse_unordered_selects pragma works for most SELECT statements,
 | |
|     however the query planner may sometimes choose an algorithm that is
 | |
|     not easily reversed, in which case the output will appear in the same
 | |
|     order regardless of the reverse_unordered_selects setting.
 | |
|     <p>SQLite makes no
 | |
|     guarantees about the order of results if a SELECT omits the ORDER BY
 | |
|     clause.  Even so, the order of results does not change from one
 | |
|     run to the next, and so many applications mistakenly come to depend
 | |
|     on the arbitrary output order whatever that order happens to be.  However, 
 | |
|     sometimes new versions of SQLite will contain optimizer enhancements
 | |
|     that will cause the output order of queries without ORDER BY clauses
 | |
|     to shift.  When that happens, applications that depend on a certain
 | |
|     output order might malfunction.  By running the application multiple
 | |
|     times with this pragma both disabled and enabled, cases where the
 | |
|     application makes faulty assumptions about output order can be
 | |
|     identified and fixed early, reducing problems
 | |
|     that might be caused by linking against a different version of SQLite.
 | |
|     </p>
 | |
| <a name="pragma_schema_version"></a>
 | |
| <h _id=pragma_schema_version style="display:none"> PRAGMA schema_version</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>schema_version; 
 | |
|       <br>PRAGMA </b><i>schema.</i><b>schema_version = </b><i>integer </i>;
 | |
| 
 | |
| <p>   The schema_version pragma will get or set
 | |
|        the value of the schema-version integer at offset 40 in the
 | |
|        <a href="fileformat2.html#database_header">database header</a>. 
 | |
| 
 | |
| <p>    SQLite automatically increments the schema-version whenever the
 | |
|        schema changes. As each SQL statement runs, the schema version is
 | |
|        checked to ensure that the schema has not changed since the SQL
 | |
|        statement was <a href="c3ref/prepare.html">prepared</a>.
 | |
|        Subverting this mechanism by using "PRAGMA schema_version"
 | |
|        may cause SQL statement to run using an obsolete schema,
 | |
|        which can lead to incorrect answers and/or
 | |
|        <a href="howtocorrupt.html#cfgerr">database corruption</a>.
 | |
| 
 | |
|        
 | |
|     <p><span style='background-color: #ffff60;'>
 | |
|     <b>Warning:</b>
 | |
|     Misuse of this pragma can result in <a href="howtocorrupt.html#cfgerr">database corruption</a>.
 | |
|     </span></p>
 | |
|   
 | |
| 
 | |
| <p>    For the purposes of this pragma, the <a href="lang_vacuum.html">VACUUM</a> command is considered
 | |
|        a schema change, since <a href="lang_vacuum.html">VACUUM</a> will usual alter the "rootpage"
 | |
|        values for entries in the <a href="schematab.html">sqlite_schema table</a>.
 | |
| 
 | |
| 
 | |
| <p>    See also the <a href="pragma.html#pragma_application_id">application_id pragma</a> and <a href="pragma.html#pragma_user_version">user_version pragma</a>.
 | |
| <a name="pragma_secure_delete"></a>
 | |
| <h _id=pragma_secure_delete style="display:none"> PRAGMA secure_delete</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>secure_delete;
 | |
|      <br>PRAGMA </b><i>schema.</i><b>secure_delete = </b><i>boolean</i>|<b>FAST</b></p>
 | |
|     <p>Query or change the secure-delete setting. When secure_delete is
 | |
|     on, SQLite overwrites deleted content with zeros.  The default
 | |
|     setting for secure_delete is determined by the <a href="compile.html#secure_delete">SQLITE_SECURE_DELETE</a>
 | |
|     compile-time option and is normally off.  The off setting for
 | |
|     secure_delete improves performance by reducing the number of CPU cycles
 | |
|     and the amount of disk I/O.  Applications that wish to avoid leaving
 | |
|     forensic traces after content is deleted or updated should enable the
 | |
|     secure_delete pragma prior to performing the delete or update, or else
 | |
|     run <a href="lang_vacuum.html">VACUUM</a> after the delete or update.
 | |
| 
 | |
|     <p>The "fast" setting for secure_delete (added circa 2017-08-01)
 | |
|     is an intermediate setting in between "on" and "off".
 | |
|     When secure_delete is set to "fast",
 | |
|     SQLite will overwrite deleted content with zeros only if doing so
 | |
|     does not increase the amount of I/O.  In other words, the "fast"
 | |
|     setting uses more CPU cycles but does not use more I/O.
 | |
|     This has the effect of purging all old content from <a href="fileformat2.html#btree">b-tree pages</a>,
 | |
|     but leaving forensic traces on <a href="fileformat2.html#freelist">freelist pages</a>.
 | |
| 
 | |
|     <p>
 | |
|     When there are <a href="lang_attach.html">attached databases</a> and no database
 | |
|     is specified in the pragma, all databases have their secure-delete
 | |
|     setting altered.
 | |
|     The secure-delete setting for newly attached databases is the setting
 | |
|     of the main database at the time the ATTACH command is evaluated.
 | |
| 
 | |
|     <p>
 | |
|     When multiple database connections share the same cache, changing
 | |
|     the secure-delete flag on one database connection changes it for them
 | |
|     all.
 | |
|     </p>
 | |
| <a name="pragma_short_column_names"></a>
 | |
| <h _id=pragma_short_column_names style="display:none"> PRAGMA short_column_names</h><hr>
 | |
|     <p><b>PRAGMA short_column_names;
 | |
|        <br>PRAGMA short_column_names = </b><i>boolean</i><b>;</b></p>
 | |
| 
 | |
|     <p>Query or change the short-column-names flag. This flag affects
 | |
|     the way SQLite names columns of data returned by <a href="lang_select.html">SELECT</a> statements.
 | |
|     See the <a href="pragma.html#pragma_full_column_names">full_column_names</a> pragma for full details.
 | |
|     </p>
 | |
| 
 | |
|     
 | |
|     <p style='background-color: #ffd0d0;'>
 | |
|     <b>This pragma is deprecated</b> and exists
 | |
|     for backwards compatibility only.  New applications
 | |
|     should avoid using this pragma.  Older applications should discontinue
 | |
|     use of this pragma at the earliest opportunity.  This pragma may be omitted
 | |
|     from the build when SQLite is compiled using <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a>.
 | |
|     </p>
 | |
|   
 | |
| <a name="pragma_shrink_memory"></a>
 | |
| <h _id=pragma_shrink_memory style="display:none"> PRAGMA shrink_memory</h><hr>
 | |
|     <p><b>PRAGMA shrink_memory</b></p>
 | |
| 
 | |
|     <p>This pragma causes the database connection on which it is invoked
 | |
|     to free up as much memory as it can, by calling
 | |
|     <a href="c3ref/db_release_memory.html">sqlite3_db_release_memory()</a>.
 | |
|     </p>
 | |
| <a name="pragma_soft_heap_limit"></a>
 | |
| <h _id=pragma_soft_heap_limit style="display:none"> PRAGMA soft_heap_limit</h><hr>
 | |
|     <p><b>PRAGMA soft_heap_limit<br>
 | |
|           PRAGMA soft_heap_limit=</b><i>N</i></p>
 | |
| 
 | |
|     <p>This pragma invokes the <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64()</a> interface with
 | |
|     the argument N, if N is specified and is a non-negative integer.
 | |
|     The soft_heap_limit pragma always returns the same integer
 | |
|     that would be returned by the <a href="c3ref/hard_heap_limit64.html">sqlite3_soft_heap_limit64</a>(-1) C-language
 | |
|     function.
 | |
|     </p>
 | |
|     <p>See also the <a href="pragma.html#pragma_hard_heap_limit">hard_heap_limit pragma</a>.
 | |
| <a name="pragma_stats"></a>
 | |
| <h _id=pragma_stats style="display:none"> PRAGMA stats</h><hr>
 | |
|     <p><b>PRAGMA stats;</b> </p>
 | |
|     <p>This pragma returns auxiliary information about tables and
 | |
|     indices.  The returned information is used during testing to help
 | |
|     verify that the query planner is operating correctly.  The format
 | |
|     and meaning of this pragma will likely change from one release
 | |
|     to the next. Because of its volatility, the behavior and output
 | |
|     format of this pragma are deliberately undocumented.</p>
 | |
| 
 | |
|     
 | |
|     <p style='background-color: #f0e0ff;'>
 | |
|     The intended use of this pragma is only for testing and validation of
 | |
|     SQLite.  This pragma is subject to change without notice and is not
 | |
|     recommended for use by application programs.</p>
 | |
|   
 | |
| <a name="pragma_synchronous"></a>
 | |
| <h _id=pragma_synchronous style="display:none"> PRAGMA synchronous</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>synchronous;
 | |
|         <br>PRAGMA </b><i>schema.</i><b>synchronous = </b>
 | |
|           <i>0 | OFF | 1 | NORMAL | 2 | FULL | 3 | EXTRA</i><b>;</b></p>
 | |
| 
 | |
|     <p>Query or change the setting of the "synchronous" flag.
 | |
|     The first (query) form will return the synchronous setting as an 
 | |
|     integer.  The second form changes the synchronous setting.
 | |
|     The meanings of the various synchronous settings are as follows:</p>
 | |
|     <dl>
 | |
|     <dt><b>EXTRA</b> (3)</dt>
 | |
|     <dd>
 | |
|     EXTRA synchronous is like FULL with the addition that the directory
 | |
|     containing a <a href="lockingv3.html#rollback">rollback journal</a> is synced after that journal is unlinked
 | |
|     to commit a transaction in DELETE mode.  EXTRA provides additional
 | |
|     durability if the commit is followed closely by a power loss.</dd>
 | |
|     <dt><b>FULL</b> (2)</dt>
 | |
|     <dd>
 | |
|     When synchronous is FULL (2), the SQLite database engine will
 | |
|     use the xSync method of the <a href="vfs.html">VFS</a> to ensure that all content is safely
 | |
|     written to the disk surface prior to continuing.
 | |
|     This ensures that an operating system crash or power failure will
 | |
|     not corrupt the database.
 | |
|     FULL synchronous is very safe, but it is also slower.  FULL is the
 | |
|     most commonly used synchronous setting when not in <a href="wal.html">WAL mode</a>.</dd>
 | |
|     <dt><b>NORMAL</b> (1)</dt>
 | |
|     <dd>
 | |
|     When synchronous is NORMAL (1), the SQLite database
 | |
|     engine will still sync at the most critical moments, but less often
 | |
|     than in FULL mode.  There is a very small (though non-zero) chance that
 | |
|     a power failure at just the wrong time could corrupt the database in
 | |
|     <a href="pragma.html#pragma_journal_mode">journal_mode</a>=DELETE on an older filesystem.
 | |
|     <a href="wal.html">WAL mode</a> is safe from corruption with synchronous=NORMAL, and probably
 | |
|     DELETE mode is safe too on modern filesystems.  WAL mode is always consistent
 | |
|     with synchronous=NORMAL, but WAL mode does lose durability.  A transaction
 | |
|     committed in WAL mode with synchronous=NORMAL might roll back following
 | |
|     a power loss or system crash.  Transactions are durable across application
 | |
|     crashes regardless of the synchronous setting or journal mode.
 | |
|     The synchronous=NORMAL setting is a good choice for most applications
 | |
|     running in <a href="wal.html">WAL mode</a>.</dd>
 | |
|     <dt><b>OFF</b> (0)</dt>
 | |
|     <dd>
 | |
|     With synchronous OFF (0), SQLite continues without syncing
 | |
|     as soon as it has handed data off to the operating system.
 | |
|     If the application running SQLite crashes, the data will be safe, but
 | |
|     the database <a href="howtocorrupt.html#cfgerr">might become corrupted</a> if the operating system
 | |
|     crashes or the computer loses power before that data has been written
 | |
|     to the disk surface.  On the other hand, commits can be orders of
 | |
|     magnitude faster with synchronous OFF.
 | |
|     </dd></dl>
 | |
|     </p>
 | |
|  
 | |
|     <p>In <a href="wal.html">WAL</a> mode when synchronous is NORMAL (1), the WAL file is
 | |
|     synchronized before each <a href="wal.html#ckpt">checkpoint</a> and the database file is
 | |
|     synchronized after each completed <a href="wal.html#ckpt">checkpoint</a> and the WAL file
 | |
|     header is synchronized when a WAL file begins to be reused after
 | |
|     a checkpoint, but no sync operations occur during most transactions.
 | |
|     With synchronous=FULL in WAL mode, an additional
 | |
|     sync operation of the WAL file happens after each transaction commit.
 | |
|     The extra WAL sync following each transaction help ensure that 
 | |
|     transactions are durable across a power loss.  Transactions are
 | |
|     consistent with or without the extra syncs provided by
 | |
|     synchronous=FULL.
 | |
|     If durability is not a concern, then synchronous=NORMAL is normally
 | |
|     all one needs in WAL mode.</p>
 | |
| 
 | |
|     <p>The TEMP schema always has synchronous=OFF since the content of
 | |
|     of TEMP is ephemeral and is not expected to survive a power outage.
 | |
|     Attempts to change the synchronous setting for TEMP are
 | |
|     silently ignored.
 | |
| 
 | |
|     <p>See also the <a href="pragma.html#pragma_fullfsync">fullfsync</a> and <a href="pragma.html#pragma_checkpoint_fullfsync">checkpoint_fullfsync</a> pragmas.</p>
 | |
| <a name="pragma_table_info"></a>
 | |
| <h _id=pragma_table_info style="display:none"> PRAGMA table_info</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>table_info(</b><i>table-name</i><b>);</b></p>
 | |
|     <p>This pragma returns one row for each column in the named table.
 | |
|     Columns in the result set include the column name,
 | |
|     data type, whether or not the column can be NULL, and the default
 | |
|     value for the column.  The "pk" column in the result set is zero
 | |
|     for columns that are not part of the primary key, and is the index of
 | |
|     the column in the primary key for columns that are part of the primary
 | |
|     key.</p>
 | |
|     <p>The table named in the table_info pragma can also be a view.</p>
 | |
|     <p>See also: <a href="pragma.html#pragma_table_xinfo">PRAGMA table_xinfo</a>
 | |
| <a name="pragma_table_xinfo"></a>
 | |
| <h _id=pragma_table_xinfo style="display:none"> PRAGMA table_xinfo</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>table_xinfo(</b><i>table-name</i><b>);</b></p>
 | |
|     <p>This pragma returns one row for each column in the named table,
 | |
|     including <a href="vtab.html#hiddencol">hidden columns</a> in virtual tables.
 | |
|     The output is the same as for <a href="pragma.html#pragma_table_info">PRAGMA table_info</a> except that
 | |
|     hidden columns are shown rather than being omitted.
 | |
| <a name="pragma_temp_store"></a>
 | |
| <h _id=pragma_temp_store style="display:none"> PRAGMA temp_store</h><hr>
 | |
|     <p><b>PRAGMA temp_store;
 | |
|         <br>PRAGMA temp_store = </b>
 | |
|             <i>0 | DEFAULT | 1 | FILE | 2 | MEMORY</i><b>;</b></p>
 | |
| 
 | |
|     <p>Query or change the setting of the "<b>temp_store</b>" parameter.
 | |
|     When temp_store is DEFAULT (0), the compile-time C preprocessor macro
 | |
|     <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> is used to determine where temporary tables and indices
 | |
|     are stored.  When
 | |
|     temp_store is MEMORY (2) <a href="inmemorydb.html#temp_db">temporary tables</a> and indices are kept in
 | |
|     as if they were pure <a href="inmemorydb.html">in-memory databases</a> memory.
 | |
|     When temp_store is FILE (1) <a href="inmemorydb.html#temp_db">temporary tables</a> and indices are stored
 | |
|     in a file.  The <a href="pragma.html#pragma_temp_store_directory">temp_store_directory</a> pragma can be used to specify
 | |
|     the directory containing temporary files when
 | |
|     <b>FILE</b> is specified.  When the temp_store setting is changed,
 | |
|     all existing temporary tables, indices, triggers, and views are
 | |
|     immediately deleted.</p>
 | |
| 
 | |
|     <p>It is possible for the library compile-time C preprocessor symbol
 | |
|     <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> to override this pragma setting.
 | |
|     The following table summarizes
 | |
|     the interaction of the <a href="compile.html#temp_store">SQLITE_TEMP_STORE</a> preprocessor macro and the
 | |
|     temp_store pragma:</p>
 | |
| 
 | |
|     <blockquote>
 | |
|     <table cellpadding="2" border="1">
 | |
|     <tr><th valign="bottom"><a href="compile.html#temp_store">SQLITE_TEMP_STORE</a></th>
 | |
|         <th valign="bottom">PRAGMA<br>temp_store</th>
 | |
|         <th>Storage used for<br>TEMP tables and indices</th></tr>
 | |
|     <tr><td align="center">0</td>
 | |
|         <td align="center"><em>any</em></td>
 | |
|         <td align="center">file</td></tr>
 | |
|     <tr><td align="center">1</td>
 | |
|         <td align="center">0</td>
 | |
|         <td align="center">file</td></tr>
 | |
|     <tr><td align="center">1</td>
 | |
|         <td align="center">1</td>
 | |
|         <td align="center">file</td></tr>
 | |
|     <tr><td align="center">1</td>
 | |
|         <td align="center">2</td>
 | |
|         <td align="center">memory</td></tr>
 | |
|     <tr><td align="center">2</td>
 | |
|         <td align="center">0</td>
 | |
|         <td align="center">memory</td></tr>
 | |
|     <tr><td align="center">2</td>
 | |
|         <td align="center">1</td>
 | |
|         <td align="center">file</td></tr>
 | |
|     <tr><td align="center">2</td>
 | |
|         <td align="center">2</td>
 | |
|         <td align="center">memory</td></tr>
 | |
|     <tr><td align="center">3</td>
 | |
|         <td align="center"><em>any</em></td>
 | |
|         <td align="center">memory</td></tr>
 | |
|     </table>
 | |
|     </blockquote>
 | |
| <a name="pragma_temp_store_directory"></a>
 | |
| <h _id=pragma_temp_store_directory style="display:none"> PRAGMA temp_store_directory</h><hr>
 | |
|     <p><b>PRAGMA temp_store_directory;
 | |
|       <br>PRAGMA temp_store_directory = '</b><i>directory-name</i><b>';</b></p>
 | |
|     <p>Query or change the value of the <a href="c3ref/temp_directory.html">sqlite3_temp_directory</a> global
 | |
|     variable, which many operating-system interface backends use to
 | |
|     determine where to store <a href="inmemorydb.html#temp_db">temporary tables</a> and indices.</p>
 | |
| 
 | |
|     <p>When the temp_store_directory setting is changed, all existing temporary
 | |
|     tables, indices, triggers, and viewers in the database connection that
 | |
|     issued the pragma are immediately deleted.  In
 | |
|     practice, temp_store_directory should be set immediately after the first
 | |
|     database connection for a process is opened.  If the temp_store_directory
 | |
|     is changed for one database connection while other database connections
 | |
|     are open in the same process, then the behavior is undefined and
 | |
|     probably undesirable.</p>
 | |
| 
 | |
|     <p>Changing the temp_store_directory setting is <u>not</u> threadsafe.
 | |
|     Never change the temp_store_directory setting if another thread
 | |
|     within the application is running any SQLite interface at the same time.
 | |
|     Doing so results in undefined behavior.  Changing the temp_store_directory
 | |
|     setting writes to the <a href="c3ref/temp_directory.html">sqlite3_temp_directory</a> global
 | |
|     variable and that global variable is not protected by a mutex.</p>
 | |
| 
 | |
|     <p>The value <i>directory-name</i> should be enclosed in single quotes.
 | |
|     To revert the directory to the default, set the <i>directory-name</i> to
 | |
|     an empty string, e.g., <i>PRAGMA temp_store_directory = ''</i>.  An
 | |
|     error is raised if <i>directory-name</i> is not found or is not
 | |
|     writable. </p>
 | |
| 
 | |
|     <p>The default directory for temporary files depends on the OS.  Some
 | |
|     OS interfaces may choose to ignore this variable and place temporary
 | |
|     files in some other directory different from the directory specified
 | |
|     here.  In that sense, this pragma is only advisory.</p>
 | |
| 
 | |
|     
 | |
|     <p style='background-color: #ffd0d0;'>
 | |
|     <b>This pragma is deprecated</b> and exists
 | |
|     for backwards compatibility only.  New applications
 | |
|     should avoid using this pragma.  Older applications should discontinue
 | |
|     use of this pragma at the earliest opportunity.  This pragma may be omitted
 | |
|     from the build when SQLite is compiled using <a href="compile.html#omit_deprecated">SQLITE_OMIT_DEPRECATED</a>.
 | |
|     </p>
 | |
|   
 | |
| <a name="pragma_threads"></a>
 | |
| <h _id=pragma_threads style="display:none"> PRAGMA threads</h><hr>
 | |
|     <p><b>PRAGMA threads;
 | |
|       <br>PRAGMA threads = </b><i>N</i><b>;</b></p>
 | |
|     <p>Query or change the value of the 
 | |
|     <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a>,...) limit for
 | |
|     the current database connection.  This limit sets an upper bound
 | |
|     on the number of auxiliary threads that a <a href="c3ref/stmt.html">prepared statement</a> is
 | |
|     allowed to launch to assist with a query.  The default limit is 0
 | |
|     unless it is changed using the <a href="compile.html#default_worker_threads">SQLITE_DEFAULT_WORKER_THREADS</a>
 | |
|     compile-time option.  When the limit is zero, that means no
 | |
|     auxiliary threads will be launched.</p>
 | |
| 
 | |
|     <p>This pragma is a thin wrapper around the
 | |
|     <a href="c3ref/limit.html">sqlite3_limit</a>(db,<a href="c3ref/c_limit_attached.html#sqlitelimitworkerthreads">SQLITE_LIMIT_WORKER_THREADS</a>,...) interface.
 | |
|     </p>
 | |
| <a name="pragma_trusted_schema"></a>
 | |
| <h _id=pragma_trusted_schema style="display:none"> PRAGMA trusted_schema</h><hr>
 | |
|     <p><b>PRAGMA trusted_schema;
 | |
|       <br>PRAGMA trusted_schema = </b><i>boolean</i><b>;</b></p>
 | |
|     <p>The trusted_schema setting is a per-connection boolean that
 | |
|     determines whether or not SQL functions and virtual tables that
 | |
|     have not been security audited are allowed to be run by views,
 | |
|     triggers, or in expressions of the schema such as <a href="lang_createtable.html#ckconst">CHECK constraints</a>,
 | |
|     <a href="lang_createtable.html#dfltval">DEFAULT clauses</a>, <a href="gencol.html">generated columns</a>, <a href="expridx.html">expression indexes</a>, and/or
 | |
|     <a href="partialindex.html">partial indexes</a>.  This setting can also be controlled using
 | |
|     the <a href="c3ref/db_config.html">sqlite3_db_config</a>(db,<a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigtrustedschema">SQLITE_DBCONFIG_TRUSTED_SCHEMA</a>,...)
 | |
|     C-language interface.
 | |
|     <p>In order to maintain backwards compatibility, this setting is
 | |
|     ON by default.  There are advantages to turning it off, and most
 | |
|     applications will be unaffected if it is turned off.  For that reason,
 | |
|     all applications are encouraged to switch this setting off on every
 | |
|     database connection as soon as that connection is opened.
 | |
|     <p>The <a href="compile.html#trusted_schema">-DSQLITE_TRUSTED_SCHEMA=0</a> compile-time option will cause
 | |
|     this setting to default to OFF.
 | |
| <a name="pragma_user_version"></a>
 | |
| <h _id=pragma_user_version style="display:none"> PRAGMA user_version</h><hr>
 | |
|       <p><b>PRAGMA </b><i>schema.</i><b>user_version;
 | |
|       <br>PRAGMA </b><i>schema.</i><b>user_version = </b><i>integer </i><b>;</b>
 | |
| 
 | |
|   
 | |
| <p>    The user_version pragma will to get or set
 | |
|        the value of the user-version integer at offset 60 in the
 | |
|        <a href="fileformat2.html#database_header">database header</a>.  The user-version is an integer that is
 | |
|        available to applications to use however they want.  SQLite
 | |
|        makes no use of the user-version itself.
 | |
| 
 | |
| <p>    See also the <a href="pragma.html#pragma_application_id">application_id pragma</a> and <a href="pragma.html#pragma_schema_version">schema_version pragma</a>.
 | |
| <a name="pragma_vdbe_addoptrace"></a>
 | |
| <h _id=pragma_vdbe_addoptrace style="display:none"> PRAGMA vdbe_addoptrace</h><hr>
 | |
|     <p><b>PRAGMA vdbe_addoptrace = </b><i>boolean</i><b>;</b></p>
 | |
| 
 | |
|     <p>If SQLite has been compiled with the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time
 | |
|     option, then the vdbe_addoptrace pragma can be used to cause a complete
 | |
|     VDBE opcodes to be displayed as they are created during code generation.
 | |
|     This feature is used for debugging SQLite itself.  See the 
 | |
|     <a href="vdbe.html#trace">VDBE documentation</a> for more 
 | |
|     information.</p>
 | |
| 
 | |
|     
 | |
|     <p style='background-color: #f0e0ff;'>
 | |
|     This pragma is intended for use when debugging SQLite itself.  It
 | |
|     is only available when the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time option
 | |
|     is used.</p>
 | |
|   
 | |
| <a name="pragma_vdbe_debug"></a>
 | |
| <h _id=pragma_vdbe_debug style="display:none"> PRAGMA vdbe_debug</h><hr>
 | |
|     <p><b>PRAGMA vdbe_debug = </b><i>boolean</i><b>;</b></p>
 | |
| 
 | |
|     <p>If SQLite has been compiled with the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time
 | |
|     option, then the vdbe_debug pragma is a shorthand for three other
 | |
|     debug-only pragmas: vdbe_addoptrace, vdbe_listing, and vdbe_trace.
 | |
|     This feature is used for debugging SQLite itself.  See the 
 | |
|     <a href="vdbe.html#trace">VDBE documentation</a> for more 
 | |
|     information.</p>
 | |
| 
 | |
|     
 | |
|     <p style='background-color: #f0e0ff;'>
 | |
|     This pragma is intended for use when debugging SQLite itself.  It
 | |
|     is only available when the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time option
 | |
|     is used.</p>
 | |
|   
 | |
| <a name="pragma_vdbe_listing"></a>
 | |
| <h _id=pragma_vdbe_listing style="display:none"> PRAGMA vdbe_listing</h><hr>
 | |
|     <p><b>PRAGMA vdbe_listing = </b><i>boolean</i><b>;</b></p>
 | |
| 
 | |
|     <p>If SQLite has been compiled with the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time
 | |
|     option, then the vdbe_listing pragma can be used to cause a complete
 | |
|     listing of the virtual machine opcodes to appear on standard output
 | |
|     as each statement is evaluated.
 | |
|     With listing is on, the entire content of a program is printed
 | |
|     just prior to beginning execution.  The statement
 | |
|     executes normally after the listing is printed.
 | |
|     This feature is used for debugging SQLite itself.  See the 
 | |
|     <a href="vdbe.html#trace">VDBE documentation</a> for more 
 | |
|     information.</p>
 | |
| 
 | |
|     
 | |
|     <p style='background-color: #f0e0ff;'>
 | |
|     This pragma is intended for use when debugging SQLite itself.  It
 | |
|     is only available when the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time option
 | |
|     is used.</p>
 | |
|   
 | |
| <a name="pragma_vdbe_trace"></a>
 | |
| <h _id=pragma_vdbe_trace style="display:none"> PRAGMA vdbe_trace</h><hr>
 | |
|     <p><b>PRAGMA vdbe_trace = </b><i>boolean</i><b>;</b></p>
 | |
| 
 | |
|     <p>If SQLite has been compiled with the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time
 | |
|     option, then the vdbe_trace pragma can be used to cause virtual machine
 | |
|     opcodes to be printed on standard output as they are evaluated.
 | |
|     This feature is used for debugging SQLite.  See the 
 | |
|     <a href="vdbe.html#trace">VDBE documentation</a> for more 
 | |
|     information.</p>
 | |
| 
 | |
|     
 | |
|     <p style='background-color: #f0e0ff;'>
 | |
|     This pragma is intended for use when debugging SQLite itself.  It
 | |
|     is only available when the <a href="compile.html#debug">SQLITE_DEBUG</a> compile-time option
 | |
|     is used.</p>
 | |
|   
 | |
| <a name="pragma_wal_autocheckpoint"></a>
 | |
| <h _id=pragma_wal_autocheckpoint style="display:none"> PRAGMA wal_autocheckpoint</h><hr>
 | |
|     <p><b>PRAGMA wal_autocheckpoint;<br>
 | |
|           PRAGMA wal_autocheckpoint=</b><i>N</i><b>;</b></p>
 | |
| 
 | |
|     <p>This pragma queries or sets the <a href="wal.html">write-ahead log</a> 
 | |
|     <a href="wal.html#ckpt">auto-checkpoint</a> interval.
 | |
|     When the <a href="wal.html">write-ahead log</a> is enabled (via the
 | |
|     <a href="pragma.html#pragma_journal_mode">journal_mode pragma</a>) a checkpoint will be run automatically whenever
 | |
|     the write-ahead log equals or exceeds <i>N</i> pages in length.
 | |
|     Setting the auto-checkpoint size to zero or a negative value
 | |
|     turns auto-checkpointing off.</p>
 | |
|     
 | |
|     <p>This pragma is a wrapper around the
 | |
|     <a href="c3ref/wal_autocheckpoint.html">sqlite3_wal_autocheckpoint()</a> C interface.
 | |
|     All automatic checkpoints are <a href="c3ref/wal_checkpoint_v2.html">PASSIVE</a>.</p>
 | |
| 
 | |
|     <p>Autocheckpointing is enabled by default with an interval
 | |
|     of 1000 or <a href="compile.html#default_wal_autocheckpoint">SQLITE_DEFAULT_WAL_AUTOCHECKPOINT</a>.</p>
 | |
| 
 | |
| <a name="pragma_wal_checkpoint"></a>
 | |
| <h _id=pragma_wal_checkpoint style="display:none"> PRAGMA wal_checkpoint</h><hr>
 | |
|     <p><b>PRAGMA </b><i>schema.</i><b>wal_checkpoint;</b><br>
 | |
|        <b>PRAGMA </b><i>schema.</i><b>wal_checkpoint(PASSIVE);</b><br>
 | |
|        <b>PRAGMA </b><i>schema.</i><b>wal_checkpoint(FULL);</b><br>
 | |
|        <b>PRAGMA </b><i>schema.</i><b>wal_checkpoint(RESTART);</b><br>
 | |
|        <b>PRAGMA </b><i>schema.</i><b>wal_checkpoint(TRUNCATE);</b>
 | |
|    </p>
 | |
| 
 | |
|     <p>If the <a href="wal.html">write-ahead log</a> is enabled (via the <a href="pragma.html#pragma_journal_mode">journal_mode pragma</a>),
 | |
|     this pragma causes a <a href="wal.html#ckpt">checkpoint</a> operation to run on database
 | |
|     <i>database</i>, or on all attached databases if <i>database</i>
 | |
|     is omitted.  If <a href="wal.html">write-ahead log</a> mode is disabled, this pragma is a
 | |
|     harmless no-op.</p>
 | |
| 
 | |
|     <p>Invoking this
 | |
|     pragma without an argument is equivalent to calling the
 | |
|     <a href="c3ref/wal_checkpoint.html">sqlite3_wal_checkpoint()</a> C interface.</p>
 | |
|     Invoking this pragma with an argument is equivalent to calling the
 | |
|     <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> C interface with a 
 | |
|     <a href="c3ref/c_checkpoint_full.html">3rd parameter</a>
 | |
|     corresponding to the argument:
 | |
| 
 | |
|     <dl>
 | |
|     <dt>PASSIVE<dd>
 | |
|       Checkpoint as many frames as possible without waiting for any database 
 | |
|       readers or writers to finish. Sync the db file if all frames in the log
 | |
|       are checkpointed. This mode is the same as calling the
 | |
|       <a href="c3ref/wal_checkpoint.html">sqlite3_wal_checkpoint()</a> C interface. The
 | |
|       <a href="c3ref/busy_handler.html">busy-handler callback</a> is never invoked in
 | |
|       this mode.
 | |
|    
 | |
|     <dt>FULL<dd>
 | |
|       This mode blocks 
 | |
|       (invokes the <a href="c3ref/busy_handler.html">busy-handler callback</a>)
 | |
|       until there is no
 | |
|       database writer and all readers are reading from the most recent database
 | |
|       snapshot. It then checkpoints all frames in the log file and syncs the
 | |
|       database file. FULL blocks concurrent writers while it is
 | |
|       running, but readers can proceed.
 | |
|    
 | |
|     <dt>RESTART<dd>
 | |
|       This mode works the same way as FULL with the addition that after 
 | |
|       checkpointing the log file it blocks (calls the 
 | |
|       <a href="c3ref/busy_handler.html">busy-handler callback</a>)
 | |
|       until all readers are finished with the log file. This ensures 
 | |
|       that the next client to write to the database file restarts the log file 
 | |
|       from the beginning. RESTART blocks concurrent writers while it is
 | |
|       running, but allowed readers to proceed.
 | |
|    
 | |
|     <dt>TRUNCATE<dd>
 | |
|       This mode works the same way as RESTART with the 
 | |
|       addition that the WAL file is truncated to zero bytes upon successful
 | |
|       completion.
 | |
|     </dl>
 | |
| 
 | |
| 
 | |
|     <p>The wal_checkpoint pragma returns a single row with three
 | |
|     integer columns.  The first column is usually 0 but will be
 | |
|     1 if a RESTART or FULL or TRUNCATE checkpoint was blocked from completing,
 | |
|     for example because another thread or process was actively
 | |
|     using the database.  In other words, the first column is 0 if the
 | |
|     equivalent call to <a href="c3ref/wal_checkpoint_v2.html">sqlite3_wal_checkpoint_v2()</a> would have returned
 | |
|     <a href="rescode.html#ok">SQLITE_OK</a> or 1 if the equivalent call would have returned <a href="rescode.html#busy">SQLITE_BUSY</a>.
 | |
|     The second column is the number of modified pages that have been
 | |
|     written to the write-ahead log file.
 | |
|     The third column is the number of pages in the write-ahead log file
 | |
|     that have been successfully moved back into the database file at
 | |
|     the conclusion of the checkpoint.
 | |
|    The second and third column are -1 if there is no
 | |
|     write-ahead log, for example if this pragma is invoked on a database
 | |
|     connection that is not in <a href="wal.html">WAL mode</a>.</p>
 | |
| <a name="pragma_writable_schema"></a>
 | |
| <h _id=pragma_writable_schema style="display:none"> PRAGMA writable_schema</h><hr>
 | |
|     <p><b>PRAGMA writable_schema  = </b><i>boolean</i><b>;</b></p>
 | |
| 
 | |
|     <p>When this pragma is on, and the <a href="c3ref/c_dbconfig_defensive.html#sqlitedbconfigdefensive">SQLITE_DBCONFIG_DEFENSIVE</a> flag
 | |
|     is off, then the <a href="schematab.html">sqlite_schema</a> table
 | |
|     can be changed using ordinary <a href="lang_update.html">UPDATE</a>, <a href="lang_insert.html">INSERT</a>, and <a href="lang_delete.html">DELETE</a>
 | |
|     statements.  <span style='background-color: #ffff60;'><b>Warning:</b>
 | |
|     misuse of this pragma can easily result in
 | |
|     a <a href="howtocorrupt.html#cfgerr">corrupt database file</a>.</span>
 | |
| 
 | |
| <hr>
 | |
| 
 |