使用Linux,我想比较两个具有相同模式的SQLite数据库.
有没有一个工具可以输出这些差异?
SQLite使用SQL,所以一般的SQL工具也可以.
使用Linux,我想比较两个具有相同模式的SQLite数据库.
有没有一个工具可以输出这些差异?
SQLite使用SQL,所以一般的SQL工具也可以.
请看一下2015年5月7日发布的SQLite Release 3.8.10.此版本首次包含用于计算两个SQLite数据库文件之间差异的sqldiff.exe utility program.这个程序很可能也会成为future 版本的一部分.
sqldiff.exe命令行工具应该适用于所有受支持的操作系统,并提供几个switch 来改变其输出行为.用法示例:
sqldiff [options] database1.sqlite database2.sqlite
如果没有指定选项,那么sqldiff.exe的输出是SQL语句,将database1.sqlite
(源数据库)转换为database2.sqlite
(目标数据库).
然而,也存在一定的局限性.例如,sqldiff.exe实用程序(至少目前)不会显示触发器、视图或虚拟表中的差异.
Sample command and output
我取了一个简单的键值存储数据库(db1.sqlite
),然后
sqldiff db1.sqlite db2.sqlite
并得到以下输出:
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
之后,表my_table_size
由触发器自动更新.然后我又跑了sqldiff.exe,但这次第一个参数是db2.sqlite
,第二个参数是db1.sqlite
:
sqldiff db2.sqlite db1.sqlite
并得到以下输出:
DELETE FROM my_table WHERE rowid=1;
UPDATE my_table_size SET counter=0 WHERE rowid=1;
sqldiff download links
自2016年1月20日发布SQLite version 3.10.2以来,sqldiff的32位二进制文件可以直接从SQLite Download Page下载.它们可以在相应操作系统的sqlite tools个档案中找到(参见Precompiled Binaries节).例如,以下是指向3.36.0版sqlite tools个存档的链接:
对于版本3.10.2之前的SQLite版本,SQLite网站承载了sqldiff个32位二进制文件,但没有链接到它们.以下是3.8.10版sqldiff的链接:
如果你需要64位二进制文件,那么你需要download个原始源代码并自己编译它们.(文件sqldiff.c位于包含源的归档文件的tool子目录中.)