【问题标题】:Comparing 2 SQLite databases比较 2 个 SQLite 数据库
【发布时间】:2022-02-21 15:09:25
【问题描述】:

我想比较 2 个 SQLite 数据库,以检查它是否需要在客户端计算机上更新。

我不确定我应该怎么做。 是否应该创建内部版本 ID 或比较文件大小(这可能不是一个好主意,因为我认为文件大小在我编辑数据库时不会改变)。

有人知道做我需要做的事情的好方法吗?

谢谢!

【问题讨论】:

  • 这是一种“一次性”类型的比较,还是您需要定期做的事情?
  • 可以在两台计算机上进行更改吗?如果是,您总是需要比较所有内容。

标签: sqlite


【解决方案1】:

您可以尝试转储每个 SQLite 数据库,使用 SQLite 的 .dump 命令:

$ sqlite3 /path/to/database1 .dump > database1.sql
$ sqlite3 /path/to/database2 .dump > database2.sql

然后比较生成的文件。如果您的两个数据库非常相似,一个简单的diff 可能会显示任何差异,例如

$ diff -u database1.sql database2.sql

希望这会有所帮助!

【讨论】:

  • 我从来没有这样做过。你如何比较转储文件?按文件长度?
  • 转储文件是文本的;您可以按长度比较它们以进行简单比较,或使用diff 命令查看具体差异可能是什么。如果不出意外,只需查看这些转储文件可能会很有用/有帮助。
【解决方案2】:

原始问题有点晚,但可能对其他人有帮助。

在 Windows 上,您可以使用 KS DB Merge Tools for SQLite。我是这个工具的作者。比较 DB 对象定义和数据。提供免费版本,功能强大,可满足差异/比较需求。

编辑 2022-02-21: 接受的 .dump 答案适用于许多情况,但它可能会报告误报的变化。这是this 问题的转储结果: 两列都是主键的一部分,因此从数据模型的角度来看,数据是相同的,但转储是不同的。我的工具是使用主键来比较数据,所以这种情况不会报告任何变化。

【讨论】:

  • 没试过,但网站看起来很有希望。感谢您提供免费版本 - 值得点赞。
【解决方案3】:

你可以使用sqldiff

在 Debian 或基于 Debian 的系统(可能还有其他 Linux 系统)上,安装 sqlite3 时默认安装它:apt install sqlite3

在 MacOS 上,可以使用 Homebrew 安装:brew install sqldiff

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多