将两个 postgres 数据库合并为一个的最简单方法?

Posted

技术标签:

【中文标题】将两个 postgres 数据库合并为一个的最简单方法?【英文标题】:Simplest way to merge two postgres databases into one? 【发布时间】:2014-08-04 11:24:15 【问题描述】:

目前我有两个用于两个不同数据源的 postgres 9 数据库。

数据库 1 被称为 musicbrainz,主要用户是 musicbrainz,表是在 musicbrainz

模式中创建的

数据库 2 被称为 discogs,主要用户是 discogs,表是在 discogs

架构中创建的

我现在需要执行涉及两个数据库中的表的查询,所以我想将所有表放在一个数据库中。我很高兴重新开始并从原始数据文件中加载数据,但最简单的方法是什么,特别是我在用户名、模式名和数据库名之间的关系以及与模式名称相同的模式之间有点困惑数据库/或用户,而不是使用公共。

另外一个问题是两个数据库(musicbrainz 和 discogs)中有一些同名的表,尽管重命名一个感觉是可能的。请注意,数据库仅供单个用户(我)使用

解决方案 我决定这样做:

创建新数据库musicdata 创建与 unix 用户名匹配的新数据库超级用户 创建架构 musicbrainzdiscogs 将用户架构搜索路径设置为 musicbrainz 将 musicbrainz 数据导入带有架构 musicbrainz 的 musicdata 将用户架构搜索路径设置为 discogs 将 disocgs 数据导入带有 schema discogs 的 musicdata 将用户架构搜索路径设置为 musicbrainz、discogs 检查可以看到所有带有psql和\dt的表;

到目前为止一切正常

【问题讨论】:

不是答案而是建议:您可以使用dblink 从另一个数据库访问一个数据库 Postgresql : Merge 2 similar databases的可能重复 他们已经在不同的模式中。只需将它们加载到单个数据库中即可。然后 CREATE VIEW 包装器只是 UNION ALL 两个数据源,例如CREATE VIEW tracks AS SELECT col1, col2, col3 FROM musicbrainz.tracks UNION ALL SELECT col1, col2, col3 FROM discogs.tracks。或者使用两个原始表中的CREATE TABLE (LIKE ...) 然后INSERT INTO ... SELECT 谢谢,但我想你误解了我不需要合并数据 我认为 dblink 会有性能问题,问题实际上是关于如何最好地在逻辑上组织我的数据,我认为我的解决方案可以完成这项工作。 【参考方案1】:

解决方案我决定这样做:

    创建新数据库musicdata 创建与 unix 用户名匹配的新数据库超级用户 创建架构musicbrainzdiscogs 将用户架构搜索路径设置为musicbrainz 将musicbrainz数据导入musicdata,架构musicbrainz 将用户架构搜索路径设置为discogs 将 disocgs 数据导入 musicdata 与架构 discogs 将用户架构搜索路径设置为musicbrainz, discogs 检查可以看到所有带有psql\dt的表;

【讨论】:

以上是关于将两个 postgres 数据库合并为一个的最简单方法?的主要内容,如果未能解决你的问题,请参考以下文章

合并两个地图

在 Vim 中,将文件中的所有行合并为一行的最简单方法是啥?

将发布合并到一个 JAR 文件中的最简单方法

从 Postgres 中的表函数返回多行的最简单方法是啥?

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

Postgres 合并为空 JSONB 数组