gpt4 book ai didi

database - 无论主键如何,如何检查两个关系数据库是否相同?

转载 作者:太空狗 更新时间:2023-10-30 02:00:21 25 4
gpt4 key购买 nike

我有一个包含大约 100 个表的关系数据库。每个表都有唯一的、数字的、带有合成值的主键,并且有许多链接表的外键。表格不大(数十或数百或记录)。这是一个 SQLite 数据库。

出于测试目的,我需要通过 linux 脚本(简单的 bash 脚本、perl、diff、sed 可用)来比较数据库的两个副本。我需要验证两个数据库的记录数是否相同并且记录具有相同的内容并转储差异。问题是,只要关系相同,键的值就可以不同。

例如:

有一个包含主键“ix_country”和“name”的表“country”,以及一个包含字段“name”、主键“ix_customer”和外键“ix_country”的表“customer”。

这两个数据库是相等的:第一个数据库:

国家:name="USA"ix_country=1;客户:name="Joe"ix_customer=10 ix_country=1

第二个数据库:

国家:name="USA"ix_country=1771;客户:name="Joe"ix_customer=27 ix_country=1771

两个副本具有相同的结构。

有没有简单的方法来做到这一点?

更新:

还有一个要求 - 脚本必须对结构的变化具有鲁棒性。如果添加或删除表或字段,它必须起作用。

更新 2:

我开始自己解决这个问题。一般策略是编写创建“身份映射”文件的 SQL 脚本。该映射包含每个记录的主键值(“人工身份”)和“自然身份”键 - 一个唯一标识记录的字符串。对于数据库中的某些表,有一个唯一的自然 id 键(如我的示例中的国家名称)。其他表需要序列中的序号,还有一些表将自己的身份与父级中的身份结合起来(如果父级也有父级,则可能递归)。

所有记录都由第二个 SQL 脚本以识别人工身份的格式转储到第二个文本文件。

perl 脚本将第二个文件中的所有人工身份替换为 map 中的自然身份。

对结果进行排序和比较。

最佳答案

Is there an easy to to do this

没有。这需要编程工作。

关于database - 无论主键如何,如何检查两个关系数据库是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3926322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com