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

omtl5h9j  于 2022-09-19  发布在  Linux
关注(0)|答案(6)|浏览(229)

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

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

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

nwo49xxi

nwo49xxi1#

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

  • SQLDiff.exe*命令行工具应该适用于所有支持的操作系统,并提供了几个用于更改其输出行为的开关。用法示例:
sqldiff [options] database1.sqlite database2.sqlite

如果未指定选项,则SQLDiff.exe的输出是将database1.sqlite(“源”数据库)转换为database2.sqlite(“目标”数据库)的SQL语句。

然而,也有一定的局限性。例如,SQLDiff.exe实用程序(至少当前)不会显示触发器、视图或虚拟表之间的差异。

命令和输出示例

我使用了一个简单的键值存储数据库(db1.sqlite)并复制了它(db2.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

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子目录中。)

omqzjyyz

omqzjyyz2#

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

sqlite3 first.sqlite .dump >first.dump
sqlite3 second.sqlite .dump >second.dump
diff first.dump second.dump
kokeuurv

kokeuurv3#

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

zte4gxcn

zte4gxcn4#

试试SQLite Diff

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

cs7cruho

cs7cruho5#

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

vaj7vani

vaj7vani6#

有一个免费的Web工具可以比较SQLite数据库,包括模式和数据-https://db-merge-tools.net/for-sqlite-online。它可以在兼容WASM的浏览器上运行,包括Linux上的Firefox和Chromium。

我是这个工具的作者,它是我的SQLite桌面工具的一个非平台移植。与我能找到的少数其他在线工具不同,它不会将您的数据上传到服务器以生成数据差异。但是,它上载模式来处理其余的逻辑。

相关问题