加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

将两个不同的Postgresql数据库合并到一个数据库中

发布时间:2020-12-13 16:01:35 所属栏目:百科 来源:网络整理
导读:这两个数据库具有相同的模式,但具有不同的数据.可能存在一些行的重复,但是如果找到重复项,合并就会大量保释并且不进行更新就足够了,即应该手动解决重复. 部分问题是所讨论的数据库中存在许多外键约束.此外,可能存在一些引用外键的列,这些外键实际上没有外键
这两个数据库具有相同的模式,但具有不同的数据.可能存在一些行的重复,但是如果找到重复项,合并就会大量保释并且不进行更新就足够了,即应该手动解决重复.

部分问题是所讨论的数据库中存在许多外键约束.此外,可能存在一些引用外键的列,这些外键实际上没有外键约束.后者是由于插入时的性能问题.此外,我们需要能够在旧数据库中的ID和新数据库中的ID之间进行映射.

显然,我们可以编写一堆代码来处理这个问题,但我们正在寻找一个解决方案:

>减少工作量
>进行合并的机器的开销更少.
>更可靠.如果我们必须编写代码,则需要通过测试等,并且不保证没有bug

显然我们仍然在网上和Postgresql文档中搜索答案,但到目前为止我们发现的内容一直没有用.

更新:我明确遗漏的一件事是,“重复”是由架构中的唯一约束明确定义的.我们希望恢复一个数据库的内容,然后恢复一秒钟的内容.第二次恢复期间的错误应该被认为是第二次恢复的致命错误.然后应从第二个数据库中删除重复项并创建新的转储.我们希望ID重新编号,而不是其他唯一约束. BTW可能会在第二个数据库之后合并第三个甚至第四个数据库.

解决方法

编写一堆脚本没有捷径……这实际上无法实现自动化,因为管理冲突需要应用特定于您的数据的规则.

也就是说,您可以通过删除重复的代理键来减少冲突的几率……

假设您的两个数据库只有两个表:A(id pkey)和B(id pkey,a_id引用A(id)).在第一个数据库中,找到max_a_id = max(A.id)和max_b_id = max(B.id).

在第二个数据库中:

>如果需要,请更改表B,以便a_id执行级联更新.
>如果有任何副作用可能会错误地启动,则禁用触发器.
>更新A并设置id = id max_a_id,以及B的相同类型.
>导出数据

接下来,将此数据导入第一个数据库,并相应地更新序列.

如果ID最终可能超过23亿,并且两个数据库中可能存在的唯一密钥,您仍需要警惕溢出.但至少你不需要担心重复ID.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读