使用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位于包含源的存档的工具子目录中.)
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)
它仅适用于Windows,但Code Project上有一个免费/开源的SQLite数据库比较应用程序:http://www.codeproject.com/Articles/220018/SQLite-Compare-Utility,对我来说效果很好.