使用Linux,我想比较两个具有相同模式的SQLite数据库。只会有一些不同之处。
有没有工具可以输出这些差异?最好将它们输出到命令行,这样我就可以对它们进行grep/sed。
SQLite使用SQL,因此通用的SQL工具也可以。
nwo49xxi1#
请看2015年5月7日发布的SQLite Release 3.8.10。此版本首次包含用于计算两个SQLite数据库文件之间差异的sqldiff.exe utility program。该程序很可能也将成为未来版本的一部分。
sqldiff [options] database1.sqlite database2.sqlite
如果未指定选项,则SQLDiff.exe的输出是将database1.sqlite(“源”数据库)转换为database2.sqlite(“目标”数据库)的SQL语句。
database1.sqlite
database2.sqlite
然而,也有一定的局限性。例如,SQLDiff.exe实用程序(至少当前)不会显示触发器、视图或虚拟表之间的差异。
命令和输出示例
我使用了一个简单的键值存储数据库(db1.sqlite)并复制了它(db2.sqlite)。然后,我在db2.sqlite中插入了一个键-值对。在那之后,我运行了以下命令:
db1.sqlite
db2.sqlite
sqldiff db1.sqlite db2.sqlite
并获得以下输出:
INSERT INTO MY_TABLE(rowid,“key”,value)值(1,‘D:\test\Test.txt’,x‘aabbccdd’);UPDATE MY_TABLE_SIZE设置计数器=1,其中rowid=1;
在将键-值对插入到my_table之后,触发器自动更新表my_table_size。然后,我再次运行SQLDiff.exe,但这一次的第一个参数是db2.sqlite,第二个参数是db1.sqlite:
my_table
my_table_size
sqldiff db2.sqlite db1.sqlite
从rowid=1的my_table中删除;UPDATE MY_TABLE_SIZE设置计数器=0,其中rowid=1;
sqldiff下载链接
从2016年1月20日发布的SQLite version 3.10.2开始,可以直接从SQLite Download Page下载sqldiff的32位二进制文件。它们可以在相应操作系统的SQLite工具存档中找到(请参阅预编译二进制文件部分)。例如,以下是指向3.39.3版的SQLite工具存档的链接:
对于版本3.10.2之前的SQLite版本,SQLite网站托管sqldiff的32位二进制文件,但不链接到它们。以下是指向3.8.10版的sqldiff的链接:
如果您需要64位二进制文件,则必须download原始源代码并自己编译它们。(SQLDiff.c文件位于包含源代码的归档文件的Tool子目录中。)
omqzjyyz2#
一种可能性是使用sqlite3命令行客户机导出两个数据库,然后比较输出。例如,
sqlite3
sqlite3 first.sqlite .dump >first.dump sqlite3 second.sqlite .dump >second.dump diff first.dump second.dump
kokeuurv3#
它只适用于Windows,但在Code Project上有一个免费/开源的SQLite数据库比较应用程序:http://www.codeproject.com/Articles/220018/SQLite-Compare-Utility,它对我来说工作得很好。
zte4gxcn4#
试试SQLite Diff。
注意:这是一个付费产品,在撰写本文时是25美元,我与作者没有任何关系。
cs7cruho5#
自2016年1月20日起,在http://sqlite.org/download.html的压缩文件中包含了sqldiff(Windows SQLDiff.exe
vaj7vani6#
有一个免费的Web工具可以比较SQLite数据库,包括模式和数据-https://db-merge-tools.net/for-sqlite-online。它可以在兼容WASM的浏览器上运行,包括Linux上的Firefox和Chromium。
我是这个工具的作者,它是我的SQLite桌面工具的一个非平台移植。与我能找到的少数其他在线工具不同,它不会将您的数据上传到服务器以生成数据差异。但是,它上载模式来处理其余的逻辑。
6条答案
按热度按时间nwo49xxi1#
请看2015年5月7日发布的SQLite Release 3.8.10。此版本首次包含用于计算两个SQLite数据库文件之间差异的sqldiff.exe utility program。该程序很可能也将成为未来版本的一部分。
如果未指定选项,则SQLDiff.exe的输出是将
database1.sqlite
(“源”数据库)转换为database2.sqlite
(“目标”数据库)的SQL语句。然而,也有一定的局限性。例如,SQLDiff.exe实用程序(至少当前)不会显示触发器、视图或虚拟表之间的差异。
命令和输出示例
我使用了一个简单的键值存储数据库(
db1.sqlite
)并复制了它(db2.sqlite
)。然后,我在db2.sqlite
中插入了一个键-值对。在那之后,我运行了以下命令:并获得以下输出:
INSERT INTO MY_TABLE(rowid,“key”,value)值(1,‘D:\test\Test.txt’,x‘aabbccdd’);
UPDATE MY_TABLE_SIZE设置计数器=1,其中rowid=1;
在将键-值对插入到
my_table
之后,触发器自动更新表my_table_size
。然后,我再次运行SQLDiff.exe,但这一次的第一个参数是db2.sqlite
,第二个参数是db1.sqlite
:并获得以下输出:
从rowid=1的my_table中删除;
UPDATE MY_TABLE_SIZE设置计数器=0,其中rowid=1;
sqldiff下载链接
从2016年1月20日发布的SQLite version 3.10.2开始,可以直接从SQLite Download Page下载sqldiff的32位二进制文件。它们可以在相应操作系统的SQLite工具存档中找到(请参阅预编译二进制文件部分)。例如,以下是指向3.39.3版的SQLite工具存档的链接:
对于版本3.10.2之前的SQLite版本,SQLite网站托管sqldiff的32位二进制文件,但不链接到它们。以下是指向3.8.10版的sqldiff的链接:
如果您需要64位二进制文件,则必须download原始源代码并自己编译它们。(SQLDiff.c文件位于包含源代码的归档文件的Tool子目录中。)
omqzjyyz2#
一种可能性是使用
sqlite3
命令行客户机导出两个数据库,然后比较输出。例如,kokeuurv3#
它只适用于Windows,但在Code Project上有一个免费/开源的SQLite数据库比较应用程序:http://www.codeproject.com/Articles/220018/SQLite-Compare-Utility,它对我来说工作得很好。
zte4gxcn4#
试试SQLite Diff。
注意:这是一个付费产品,在撰写本文时是25美元,我与作者没有任何关系。
cs7cruho5#
自2016年1月20日起,在http://sqlite.org/download.html的压缩文件中包含了sqldiff(Windows SQLDiff.exe
vaj7vani6#
有一个免费的Web工具可以比较SQLite数据库,包括模式和数据-https://db-merge-tools.net/for-sqlite-online。它可以在兼容WASM的浏览器上运行,包括Linux上的Firefox和Chromium。
我是这个工具的作者,它是我的SQLite桌面工具的一个非平台移植。与我能找到的少数其他在线工具不同,它不会将您的数据上传到服务器以生成数据差异。但是,它上载模式来处理其余的逻辑。