如何比较两个SQLite文件?

27

我在Mac上使用SQLite-manager(以其XUL形式)。

如何从团队中其他人提交的SQLite文件中进行差异比较并合并他的更改?

谢谢。

4个回答

31

我相信你可以结合以下内容使用:

$ diff sqlite-file-1.sql sqlite-file-2.sql > sqlite-patch.diff
$ patch -p0 sqlite-file-1.sql sqlite-patch.diff

希望这对你有用。否则,我强烈建议查阅 man-pages(手册页):

$ man diff
$ man patch

编辑:好的,这里是全部步骤。

首先,倒出数据库:

$ sqlite test1.sql .dump > test1.sql.txt
$ sqlite test2.sql .dump > test2.sql.txt

接下来,生成一个差异文件:

$ diff -u test1.sql.txt test2.sql.txt > patch-0.1.diff

最后,应用补丁:

$ patch -p0 test1.sql.txt patch-0.1.diff

无法工作,因为SQLite是二进制文件,您得到的唯一结果是“二进制文件不同”。 - Traveling Tech Guy
2
如果您修改已存在数据的模式,这不会导致错误吗?例如,如果您添加了一个字段,并想要将该字段补丁到现有数据库中。 - Jeremy Edwards
4
用户可能需要使用sqlite3而不是sqlite。 - toliveira

16
我们可以使用sqldiff工具程序: https://www.sqlite.org/sqldiff.html 它将比较源数据库和目标数据库,并生成SQL命令,使源数据库等效于目标数据库。
- 输出任何配对行内容差异的UPDATE。 - 输出无法配对的源数据库中的行作为DELETE。 - 输出无法匹配的目标数据库中的行作为INSERT。
我们需要从工具文件夹下载源代码并编译。

2
不需要编译,预编译的二进制文件可以在下载页面上获取。 - user
你不必翻弄tool文件夹。只需运行 ./configure && make sqldiff - Warren Young

1

我该如何精确地转储我的SQLite数据库?我没有安装sqlite命令行。 - Traveling Tech Guy
1
如果您使用的是标准的Mac电脑,那么您应该在/usr/bin/sqlite3中拥有sqlite ;) - Moszi
我上次检查时,你不需要担心转储SQLite文件,因为SQLite直接使用.sql文件 - 它不像PostgreSQL或MySQL那样全部隐藏在二进制平面文件中。 - nesv
明白了,它好用。现在我必须决定谁该获得V - @indienick做对了90%,但你把它完成了... :) - Traveling Tech Guy
哈哈 :) - 没关系 :) 把奖励给indienick,他的回答比我快 ;) - Moszi

0

有一个免费的网络工具可以比较SQLite数据库,包括模式和数据 - https://ksdbmerge.tools/for-sqlite-online 适用于支持wasm的浏览器,包括Mac上的Safari。

我是那个工具的作者,它是我为SQLite编写的桌面工具的uno-platform移植版。 与我能找到的其他几个在线工具不同,它不会上传您的数据到服务器以生成数据差异。但是,它会上传模式以处理其余逻辑。

截至2022年6月,它是仅差异工具,Web版本不会生成任何同步脚本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接