PostgreSQL 将来自不同数据库的相同表合并到单个数据库中

nox*_*xee 9 postgresql

我已经开始从事一个项目,其中应用程序数据被拆分到多个数据库中,这些数据库都具有相同的架构(基本上每个“组织”都有一个数据库)。

经过一些讨论,我们决定这不是我们存储数据的最有效方式,并且希望将所有这些单独的数据库合并到一个数据库中。

我想知道最好的方法是什么。我目前正在考虑执行以下操作:

  1. 从数据库之一转储架构并将其还原到新的主数据库:

    pg_dump [OLD_DATABASE] --schema-only > dbschema.sql

    psql -d [NEW_DATABASE -f dbschema.sql

  2. 从所有禁用触发器的旧数据库中转储数据,并插入格式:

    pg_dump [OLD_DATABASES] --disable-triggers --data-only --inserts > old_db_data.sql

  3. 从数据库文件中恢复所有转储的数据:

    psql [NEW_DATABASE] < old_db_data.sql

这是进行这种合并的正确方法还是我完全不合时宜?此外,这会正确处理外键依赖关系吗?

cac*_*que 0

如果您使用 Postgresql 9.3 或更高版本,我强烈建议您使用扩展postgres_fdw

这样,您可以按照您在帖子(#1)中建议的方式创建一个新的空数据库,并为每个“组织”创建一个不同的架构,其中您将拥有与该“组织”数据库相对应的外部表。

这就像将所有数据库集中在一个数据库中一样。
使用简单的方法,INSERT INTO main.table SELECT * FROM org1.table您可以将数据从一个数据库迁移到另一个数据库。
您可以使用不同模式中的相似表之间的联接来检查数据完整性。如果您愿意,您可以继续此设置而不进行任何合并,直到您决定这样做的最佳时机。

如果您选择使用此扩展,您应该阅读有关该主题的大量文档或在 SO 中提出更多问题以使您的初始设置运行。