如何在Linux上比较两个SQLite数据库

Nic*_*oul 55 sql linux sqlite

使用Linux,我想比较两个具有相同模式的SQLite数据库.只会有一些差异.

是否有工具可以输出这些差异?最好将它们输出到命令行,以便我可以grep/sed它们.

SQLite使用SQL,因此一般的SQL工具也可以这样做.

hon*_*onk 55

请查看2015年5月7日发布的SQLite版本3.8.10.此版本首次包含sqldiff.exe实用程序,用于计算两个SQLite数据库文件之间的差异.该程序很可能也将成为未来版本的一部分.

sqldiff.exe命令行行工具应适用于所有支持的操作系统,并提供了几个开关,用于改变其输出行为.用法示例:

sqldiff [options] database1.sqlite database2.sqlite
Run Code Online (Sandbox Code Playgroud)

如果未指定任何选项,则sqldiff.exe的输出是将database1.sqlite("源"数据库)转换为database2.sqlite("目标"数据库)的SQL语句.

但是,也存在一定的局限性.例如,sqldiff.exe实用程序(至少当前)不显示TRIGGER,VIEW或虚拟表中的差异.


示例命令和输出

我拿了一个简单的键值存储数据库(db1.sqlite)并制作了它的副本(db2.sqlite).然后我插入一个键值对 db2.sqlite.之后我运行了以下命令:

sqldiff db1.sqlite db2.sqlite
Run Code Online (Sandbox Code Playgroud)

得到以下输出:

INSERT INTO my_table(rowid,"key",value)VALUES(1,'D:\ Test\Test.txt',x'aabbccdd');
UPDATE my_table_size SET counter = 1 WHERE rowid = 1;

my_table_size插入键值对后,表格由TRIGGER自动更新my_table.然后我再次运行sqldiff.exe,但这次使用with db2.sqlite第一个参数和db1.sqlite第二个参数:

sqldiff db2.sqlite db1.sqlite
Run Code Online (Sandbox Code Playgroud)

得到以下输出:

DELETE FROM my_table WHERE rowid = 1;
UPDATE my_table_size SET counter = 0 WHERE rowid = 1;


sqldiff下载链接

自2016年1月20日发布的SQLite版本3.10.2起,sqldiff的32位二进制文​​件可以直接从SQLite下载页面下载.它们可以在相应操作系统的sqlite工具存档中找到(请参阅预编译二进制文件部分).例如,以下是版本3.27.1 的sqlite工具存档的链接:

对于版本3.10.2之前的SQLite版本,SQLite网站承载sqldiff的 32位二进制文​​件,但不链接到它们.以下是版本3.8.10的sqldiff的链接:

如果您需要64位二进制文​​件,则必须下载原始源并自行编译.(文件sqldiff.c位于包含源的存档的工具子目录中.)

  • [here](http://sqlite.org/2015/sqldiff-win32-x86-3081000.zip)是[sqlite.org](http://sqlite.org/index.html)上的当前下载链接zip存档包含[_sqlite.exe_](https://www.sqlite.org/sqldiff.html)文件. (2认同)

laa*_*lto 48

一种可能性是使用sqlite3命令行客户端导出两个数据库,然后区分输出.例如,

sqlite3 first.sqlite .dump >first.dump
sqlite3 second.sqlite .dump >second.dump
diff first.dump second.dump
Run Code Online (Sandbox Code Playgroud)

  • @Jeshwanth Kumar NK:`.dump`是`sqlite3`命令行客户端识别的命令.`first.sqlite`和`second.sqlite`是你想要差异的sqlite数据库文件的名称. (4认同)

Mat*_*ock 9

它仅适用于Windows,但Code Project上有一个免费/开源的SQLite数据库比较应用程序:http://www.codeproject.com/Articles/220018/SQLite-Compare-Utility,对我来说效果很好.