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

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

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

SQLite使用SQL,所以一般的SQL工具也可以。

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

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

sqldiff [options] database1.sqlite database2.sqlite 

如果没有指定任何选项,那么sqldiff.exe的输出是将把database1.sqlite (“源”数据库)转换为database2.sqlite (“目标”数据库)的SQL语句。

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


示例命令和输出

我使用了一个简单的键值存储数据库( db1.sqlite )并创build了一个副本( db2.sqlite )。 然后我将一个键值对插入到db2.sqlite 。 之后,我运行以下命令:

 sqldiff db1.sqlite db2.sqlite 

并得到以下输出:

(1,'D:\ Test \ Test.txt',x'aabbccdd');
UPDATE my_table_size SET counter = 1 WHERE rowid = 1;

将键值对插入到my_table之后,表my_table_size由TRIGGER自动更新。 然后我再次运行sqldiff.exe ,但是这次用db2.sqlite作为第一个参数, db1.sqlite作为第二个参数:

 sqldiff db2.sqlite db1.sqlite 

并得到以下输出:

DELETE FROM my_table WHERE rowid = 1;
更新my_table_size SET计数器= 0 WHERE rowid = 1;


sqldiff下载链接

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

  • 用于Linux的SQLite工具
  • 用于OS X的SQLite工具
  • 适用于Windows的SQLite工具

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

  • sqldiff for Linux
  • sqldiff为OS X
  • Windows的sqldiff

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

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

 echo .dump | sqlite3 first.sqlite >first.dump echo .dump | sqlite3 second.sqlite >second.dump diff first.dump second.dump 

它只适用于Windows,但Code Project上有一个免费的/开源的SQLite数据库比较应用程序: http : //www.codeproject.com/Articles/220018/SQLite-Compare-Utility这对我来说工作得非常好。

尝试SQLite的差异 。

注意:这是一个付费产品,在写这篇文章的时候是25美元,而且我与作者没有任何关系。

自2016年1月20日起,sqldiff(Windows sqldiff.exe)包含在http://sqlite.org/download.html的zip文件中