我已经开始从事一个项目,其中应用程序数据被拆分到多个数据库中,这些数据库都具有相同的架构(基本上每个“组织”都有一个数据库)。
经过一些讨论,我们决定这不是我们存储数据的最有效方式,并且希望将所有这些单独的数据库合并到一个数据库中。
我想知道最好的方法是什么。我目前正在考虑执行以下操作:
从数据库之一转储架构并将其还原到新的主数据库:
pg_dump [OLD_DATABASE] --schema-only > dbschema.sql
psql -d [NEW_DATABASE -f dbschema.sql
从所有禁用触发器的旧数据库中转储数据,并插入格式:
pg_dump [OLD_DATABASES] --disable-triggers --data-only --inserts > old_db_data.sql
从数据库文件中恢复所有转储的数据:
psql [NEW_DATABASE] < old_db_data.sql
这是进行这种合并的正确方法还是我完全不合时宜?此外,这会正确处理外键依赖关系吗?
如果您使用 Postgresql 9.3 或更高版本,我强烈建议您使用扩展postgres_fdw。
这样,您可以按照您在帖子(#1)中建议的方式创建一个新的空数据库,并为每个“组织”创建一个不同的架构,其中您将拥有与该“组织”数据库相对应的外部表。
这就像将所有数据库集中在一个数据库中一样。
使用简单的方法,INSERT INTO main.table SELECT * FROM org1.table
您可以将数据从一个数据库迁移到另一个数据库。
您可以使用不同模式中的相似表之间的联接来检查数据完整性。如果您愿意,您可以继续此设置而不进行任何合并,直到您决定这样做的最佳时机。
如果您选择使用此扩展,您应该阅读有关该主题的大量文档或在 SO 中提出更多问题以使您的初始设置运行。
归档时间: |
|
查看次数: |
4306 次 |
最近记录: |