sqldiff.exe: Database Difference Utility
sqldiff.exe: Database Difference Utility
1.用法
2.它是如何工作的
3.限制
1. Usage
sqldiff.exe
二进制是显示SQLite数据库之间的差异的命令行实用程序。用法示例:
sqldiff [options] database1.sqlite database2.sqlite
通常的输出是一个SQL脚本,它将将database1.sqlite(“源”数据库)转换为database2.sqlite(“目标”数据库)。使用命令行开关可以更改此行为:
--changeset FILE
不要将更改写入标准输出。相反,将一个(二进制)变更集文件写入FILE。可以使用SQLite的会话扩展来解释变更集。
--lib LIBRARY-L LIBRARY
在计算差异之前,将共享库或DLL文件LIBRARY加载到SQLite中。这可用于添加模式所需的应用程序定义的整理序列。
--primarykey
使用模式定义的PRIMARY KEY而不是rowid来对源数据库和目标数据库中的行进行配对。(请参阅下面的附加说明。)
--schema
仅显示模式中的差异而不显示表格内容
--summary
显示每个表上有多少行已更改,但不显示实际更改
--table TABLE
仅显示TABLE的内容差异,而不是整个数据库
--transaction
将SQL输出封装在单个大型事务中
--vtab
添加对处理FTS3,FTS5和rtree虚拟表的支持。详情请参阅下文。
2. How It Works
sqldiff.exe实用程序通过查找源和目标中属于逻辑“对”的行来工作。默认行为是将两行视为对(如果它们在具有相同名称的表中并且它们具有相同的rowid),或者在具有相同PRIMARY KEY的WITHOUT ROWID表的情况下。配对行内容的任何差异都会以UPDATE输出。源数据库中不能配对的行将作为DELETE输出。目标数据库中不能配对的行将作为INSERT输出。
--primarykey标志稍微改变了配对算法,以便架构声明的PRIMARY KEY总是用于配对,即使在具有rowid的表上也是如此。这通常是找出差异的更好选择,但是它可能导致在将一个或多个PRIMARY KEY列设置为NULL的行的情况下遗漏差异。
3. Limitations
- sqldiff.exe实用程序无法计算rowid不可访问的rowid表的差异。具有无法访问的rowid的表的示例是:CREATE TABLE inaccessible_rowid(“rowid”TEXT,“oid”TEXT,“_rowid_”TEXT
- sqldiff.exe实用程序不会(当前)在TRIGGER或VIEW中显示差异。
- 默认情况下,不会报告虚拟表的架构或内容的差异。
但是,如果虚拟表实现在数据库中创建实际表(有时称为“影子”表)来存储其数据,则sqldiff.exe确实会计算它们之间的差异。如果生成的SQL脚本然后在与源数据库不完全相同
的数据库上运行,这可能会产生令人惊讶的效果。对于几个SQLite的捆绑虚拟表(FTS3,FTS5,rtree等),令人惊讶的效果可能包括虚拟表内容的损坏。
如果将-vtab选项传递给sqldiff.exe,则它将忽略属于FTS3,FTS5或rtree虚拟表的所有基础影子表,而是直接包含虚拟表差异。
SQLite is in the Public Domain.