diff options
Diffstat (limited to 'www/sqldiff.html')
-rw-r--r-- | www/sqldiff.html | 286 |
1 files changed, 286 insertions, 0 deletions
diff --git a/www/sqldiff.html b/www/sqldiff.html new file mode 100644 index 0000000..7451c3f --- /dev/null +++ b/www/sqldiff.html @@ -0,0 +1,286 @@ +<!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>sqldiff.exe: Database Difference Utility</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; +} +var antiRobot = 0; +function antiRobotGo(){ +if( antiRobot!=3 ) return; +antiRobot = 7; +var j = document.getElementById("mtimelink"); +if(j && j.hasAttribute("data-href")) j.href=j.getAttribute("data-href"); +} +function antiRobotDefense(){ +document.body.onmousedown=function(){ +antiRobot |= 2; +antiRobotGo(); +document.body.onmousedown=null; +} +document.body.onmousemove=function(){ +antiRobot |= 2; +antiRobotGo(); +document.body.onmousemove=null; +} +setTimeout(function(){ +antiRobot |= 1; +antiRobotGo(); +}, 100) +antiRobotGo(); +} +antiRobotDefense(); +</script> +<div class=fancy> +<div class=nosearch> +<div class="fancy_title"> +sqldiff.exe: Database Difference Utility +</div> +<div class="fancy_toc"> +<a onclick="toggle_toc()"> +<span class="fancy_toc_mark" id="toc_mk">►</span> +Table Of Contents +</a> +<div id="toc_sub"><div class="fancy-toc1"><a href="#usage">1. Usage</a></div> +<div class="fancy-toc1"><a href="#how_it_works">2. How It Works</a></div> +<div class="fancy-toc1"><a href="#limitations">3. Limitations</a></div> +</div> +</div> +<script> +function toggle_toc(){ +var sub = document.getElementById("toc_sub") +var mk = document.getElementById("toc_mk") +if( sub.style.display!="block" ){ +sub.style.display = "block"; +mk.innerHTML = "▼"; +} else { +sub.style.display = "none"; +mk.innerHTML = "►"; +} +} +</script> +</div> + + + + +<h1 id="usage"><span>1. </span>Usage</h1> + +<p> +The <tt>sqldiff.exe</tt> binary is a command-line utility program that +displays content differences between SQLite databases. Example +usage: + +</p><div class="codeblock"><pre>sqldiff [options] database1.sqlite database2.sqlite +</pre></div> + +<p> +The usual output is an SQL script that will transform +database1.sqlite (the "source" database) into database2.sqlite +(the "destination" database). This behavior can be +altered using command-line switches: + +</p><dl> +<dt><b>--changeset FILE</b></dt> +<dd><p>Do not write changes to standard output. Instead, write a (binary) + changeset file into FILE. The changeset can be interpreted using + the <a href="sessionintro.html">session extension</a> to SQLite.</p></dd> +<dt><b>--lib LIBRARY</b></dt> +<dt><b>-L LIBRARY</b></dt> +<dd><p>Load the shared library or DLL file LIBRARY into SQLite prior to + computing the differences. This can be used to add application-defined + <a href="datatype3.html#collation">collating sequences</a> that are required by the schema. +</p></dd><dt><b>--primarykey</b></dt> +<dd><p>Use the schema-defined <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> instead of the <a href="lang_createtable.html#rowid">rowid</a> to + pair rows in the source and destination database. (See additional + explanation below.)</p></dd> +<dt><b>--schema</b></dt> +<dd><p>Show only column name and table differences in the schema, + not the table content</p></dd> +<dt><b>--summary</b></dt> +<dd><p>Show how many rows have changed on each table, but do not show + the actual changes</p></dd> +<dt><b>--table TABLE</b></dt> +<dd><p>Show only the differences in content for TABLE, not for the + entire database</p></dd> +<dt><b>--transaction</b></dt> +<dd><p>Wrap SQL output in a single large transaction</p></dd> +<dt><b>--vtab</b></dt> +<dd><p>Add support for handling <a href="fts3.html">FTS3</a>, <a href="fts5.html">FTS5</a> and <a href="rtree.html">rtree</a> virtual tables. + <a href="#vtab">See below</a> for details. +</p></dd> +</dl> + +<h1 id="how_it_works"><span>2. </span>How It Works</h1> + +<p>The sqldiff.exe utility works by finding rows in the source and +destination that are logical "pairs". The default behavior is to +treat two rows as pairs if they are in tables with the same name +and they have the same <a href="lang_createtable.html#rowid">rowid</a>, or in the case of a <a href="withoutrowid.html">WITHOUT ROWID</a> +table if they have the same <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a>. Any differences in the +content of paired rows are output as UPDATEs. Rows in the source +database that could not be paired are output as DELETEs. Rows in +the destination database that could not be paired are output as +INSERTs. + +</p><p>The --primarykey flag changes the pairing algorithm slightly so +that the schema-declared <a href="lang_createtable.html#primkeyconst">PRIMARY KEY</a> is always used for pairing, +even on tables that have a <a href="lang_createtable.html#rowid">rowid</a>. This is often a better choice +for finding differences, however it can lead to missed differences in +the case of rows that have one or more PRIMARY KEY columns set to +NULL.</p> + +<h1 id="limitations"><span>3. </span>Limitations</h1> + +<ol> +<li> +<p>The sqldiff.exe utility does not compute changesets for +either: rowid tables for which the rowid is inaccessible; +or tables which have no explicit primary key. +Given the --changeset option, sqldiff omits them from the comparison. +Examples of such tables are: + +</p><div class="codeblock"><pre>CREATE TABLE NilChangeset ( + -- inaccessible rowid due to hiding its aliases + "rowid" TEXT, + "oid" TEXT, + "_rowid_" TEXT +); +</pre></div> + +and + +<div class="codeblock"><pre>CREATE TABLE NilChangeset ( + -- no explicit primary key + "authorId" TEXT, + "bookId" TEXT +); +</pre></div> + + +When sqldiff is made to compare only such tables, no error occurs. +However, the result may be unexpected. +For example, the effect of this invocation: + +<div class="codeblock"><pre>sqldiff --changeset CHANGESET_OUT --table NilChangeset db1.sdb db2.sdb +</pre></div> + +will be to produce an empty file named "CHANGESET_OUT". See <a href="session/intro.html#limitations">session limitations</a> for details. +</li><li><p> +The sqldiff.exe utility does not (currently) display differences in +<a href="lang_createtrigger.html">TRIGGERs</a> or <a href="lang_createview.html">VIEWs</a>. + +</p></li><li><p> +The sqldiff utility is not designed to support schema migrations +and is forgiving with respect to differing column definitions. +Normally, only the column names and their order are compared +for like-named tables before content comparison proceeds. + +</p><p>However, the single-table comparison option, with "sqlite_schema" +named, can be used to show or detect detailed schema differences +between a pair of databases. +When doing this, the output should not be used directly to modify a database. + +</p></li><li><p id="vtab"> +By default, differences in the schema or content of virtual tables are +not reported on. + +</p><p>However, if a <a href="vtab.html">virtual table</a> implementation creates real tables (sometimes +referred to as "shadow" tables) within the database to store its data in, then +sqldiff.exe does calculate the difference between these. This can have +surprising effects if the resulting SQL script is then run on a database that +is not <i>exactly</i> the same as the source database. For several of SQLite's +bundled virtual tables (FTS3, FTS5, rtree and others), the surprising effects +may include corruption of the virtual table content. + +</p><p> If the --vtab option is passed to sqldiff.exe, then it ignores all +underlying shadow tables belonging to an FTS3, FTS5 or rtree virtual table +and instead includes the virtual table differences directly. + +</p></li></ol> +<p align="center"><small><i>This page last modified on <a href="https://sqlite.org/docsrc/honeypot" id="mtimelink" data-href="https://sqlite.org/docsrc/finfo/pages/sqldiff.in?m=b2cb41a9fddeff1d5">2021-09-07 19:28:01</a> UTC </small></i></p> + |