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

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

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

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

Nicolas Raoul asked 2019-11-14T15:26:49Z
5个解决方案
54 votes

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

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

sqldiff [options] database1.sqlite database2.sqlite

如果未指定任何选项,则sqldiff.exe的输出为SQL语句,它将把my_table_size(“源”数据库)转换为my_table(即“目标”数据库)。

但是,也有某些限制。 例如,sqldiff.exe实用程序(至少当前)在TRIGGER,VIEW或虚拟表中不显示差异。


示例命令和输出

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

sqldiff db1.sqlite db2.sqlite

并得到以下输出:

插入my_table(rowid,“ key”,value)VALUES(1,'D:\ Test \ Test.txt',x'aabbccdd');
更新my_table_size SET计数器= 1,rowid = 1;

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

sqldiff db2.sqlite db1.sqlite

并得到以下输出:

从my_table的WHERE rowid = 1处删除;
更新my_table_size SET计数器= 0,rowid = 1;


sqldiff下载链接

由于SQLite的3.10.2版本被发布于2016年1月20日,为sqldiff的32位二进制文件可以直接从SQLite的下载页面下载。 可以在相应操作系统的sqlite工具档案中找到它们(请参阅“预编译的二进制文件”部分)。 例如,以下是指向3.30.1版的sqlite工具档案的链接:

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

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

  • 适用于Linux的sqldiff
  • 适用于OS X的sqldiff
  • Windows版sqldiff

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

honk answered 2019-11-14T15:30:11Z
48 votes

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

sqlite3 first.sqlite .dump >first.dump
sqlite3 second.sqlite .dump >second.dump
diff first.dump second.dump
laalto answered 2019-11-14T15:30:44Z
9 votes

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

Matthew Lock answered 2019-11-14T15:31:11Z
3 votes

尝试使用SQLite Diff。

注意:这是一款付费产品,在撰写本文时为25美元,与作者没有任何关系。

Julian answered 2019-11-14T15:31:45Z
1 votes

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

Klaas-Z4us-V answered 2019-11-14T15:32:12Z
translate from https://stackoverflow.com:/questions/2093263/how-to-compare-two-sqlite-databases-on-linux