需要将一个 Postgres 关系数据库合并到另一个;完全相同的架构,外键是问题

Posted

技术标签:

【中文标题】需要将一个 Postgres 关系数据库合并到另一个;完全相同的架构,外键是问题【英文标题】:Need to merge one Postgres relational database into another; same exact schema, foreign keys are issue 【发布时间】:2014-09-25 22:47:16 【问题描述】:

我有一个关系 Postgres 8.4 数据库需要合并到第二个。实际上,我只需要在我们的 webapp 中合并表示某一类域对象所需的特定表行。问题是 webapp 使用对象关系映射,因此所有表都通过使用 id 列和外键约束绑定在一起。

我的问题是 1)我只想将第一个数据库中的行附加到特定表的第二个,而不是所有表 2)由于这些表通过自动递增的 id 列绑定在一起,并且这些列显然都将在目标数据库中偏移,因此我需要将外键列引用值替换为偏移量一

我当然可以使用长而复杂的脚本来执行此操作,但我想知道是否有任何自动化工具、库等可以加快此过程。

非常感谢任何和所有 cmets 和建议!

谢谢!

【问题讨论】:

您如何知道源中的哪条记录映射到目标上的哪条记录?无论如何,看看 Kettle 和这种方法 wiki.pentaho.com/display/EAI/Insert+-+Update 这只是一个数据迁移,所以我不需要保留任何自动递增的标识符,如果那是你的要求。我只需要从 DB1 中所有互连的表中获取行,然后将这些行转储到新数据库中,并在 DB2 中重新连接它们的 ID(通过外键)。当然在概念上没有什么困难,似乎应该已经有一个工具可以完成这样的任务。 你可以用 Pentaho 做到这一点。加载主表。第一的。然后加载子表。使用 Pentaho 的查找组件来获取子记录的父 ID(针对目标数据库表进行查找)。 有关如何执行此操作的指南或参考的任何提示?我以前从未使用过 Pentaho。 【参考方案1】:

Pentaho/Kettle 有 3 个重要部分 - 输入(在我们的例子中是 DB1)、更改/修改/转换(在你的例子中没有)和输出(在你的例子中是 DB2)。如果我尝试完成整个过程,这将是一篇很长的文章。您可能需要 4-5 小时来安装软件并学习基础知识。但是一旦你这样做了,你就可以用它来做这个等等。我将它用于许多“数据移动”活动,并发现它易于学习和使用。 您将需要主表的输入/DW 组合(在图像中以红色框标记)。然后使用子表的输入、查找和输出组件。 此示例章节的链接也应该有所帮助。

Example

【讨论】:

以上是关于需要将一个 Postgres 关系数据库合并到另一个;完全相同的架构,外键是问题的主要内容,如果未能解决你的问题,请参考以下文章

合并 postgres 数据

Postgres 创建触发器函数以在允许插入之前将值从一列复制到另一列

将列上的纪元时间保存到另一列 postgres

如何使用复制命令在 postgres 中将数据从一个表复制到另一个表

git将某分支的某次提交合并到另一分支

通过第三个将一个位图合并到另一个