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

发布于 2021-02-01 17:52:02

使用Linux,我想比较两个具有相同架构的SQLite数据库。只会有一些差异。

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

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

关注者
0
被浏览
118
1 个回答
  • 面试哥
    面试哥 2021-02-01
    为面试而生,有面试问题,就找面试哥。

    请查看2015年5月7日发布的SQLite版本3.8.10。此版本首次包含
    sqldiff.exe
    实用程序,

    用于计算两个SQLite数据库文件之间的差异。该程序很可能也将成为将来版本的一部分。

    sqldiff.exe 命令行工具行应为所有支持的操作系统和提供了几个开关的工作用于改变它的输出行为。用法示例:

    sqldiff [options] database1.sqlite database2.sqlite
    

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

    但是,也有某些限制。例如, sqldiff.exe 实用程序(至少当前)在TRIGGER,VIEW或虚拟表中不显示差异。


    示例命令和输出

    我使用了一个简单的键值存储数据库(db1.sqlite),并制作了一个副本(db2.sqlite)。然后,我将一对键值对插入
    db2.sqlite。之后,我运行以下命令:

    sqldiff db1.sqlite db2.sqlite
    

    并得到以下输出:

    插入my_table(rowid,“ key”,value)VALUES(1,’D:\ Test \ Test.txt’,x’aabbccdd’);
    更新my_table_size SET计数器= 1,rowid = 1;

    my_table_size键值对插入到表后,TRIGGER会自动更新该表my_table。然后,我再次运行 sqldiff.exe
    ,但是这次使用db2.sqlite作为第一个参数和db1.sqlite第二个参数:

    sqldiff db2.sqlite db1.sqlite
    

    并得到以下输出:

    从my_table的WHERE rowid = 1处删除;
    更新my_table_size SET计数器= 0,rowid = 1;


    sqldiff下载链接

    自2016年1月20日发布SQLite
    3.10.2版
    以来,可直接从SQLite下载页面下载
    sqldiff 的32位二进制文​​件。可以在相应操作系统的 sqlite工具 档案中找到它们(请参阅“ 预编译的二进制文件”
    部分)。例如,以下是3.31.1版的 sqlite工具 档案的链接:


    对于3.10.2之前的SQLite版本,SQLite网站托管 sqldiff的 32位二进制文​​件,但没有链接到它们。以下是3.8.10版的
    sqldiff 的链接:

    如果需要64位二进制文​​件,则必须下载原始资源并自己编译它们。(文件
    sqldiff.c 位于包含源的归档的 工具 子目录中。)



推荐阅读
知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看