我有两个具有相同架构的 Postgresql 数据库,我想将它们合并(或将它们合并到第三个)。
问题是这些表都有 id PK,它们是自动递增主键,并使用这些 id 列作为其他表的 FK。
我知道两个数据库之间的数据在逻辑上是不同的,但它们的 PK 重叠,例如:
数据库A:
表构建:
id | name
1 | Smooth Hall
2 | Orchard Towers
桌子地板:
id | building_id (FK building.id) | floor_number
1 | 1 | 1
2 | 2 | 1
3 | 2 | 2
数据库B:
表构建:
id | name
1 | Chancey Theater
2 | Allen Hall
桌子地板:
id | building_id (FK building.id) | floor_number
1 | 1 | 1
2 | 2 | 1
3 | 2 | 2
您是否可以建议使用一种工具或方法来合并这些数据库,以便结果包含所有数据和所有 FK 关系?
我不关心结果行的顺序,也不关心输出中 id 列中的值,只要数据具有相同的逻辑结构和关系即可,例如
数据库C:
表构建:
id | name
a | Smooth Hall
b | Orchard Towers
c | Chancey Theater
d | Allen Hall
桌子地板:
id | building_id (FK building.id) | floor_number
e | a | 1
f | b | 1
g | b | 2
h | c | 1
i | d | 1
j | d | 2
其中 aj 是任何不同的数字。
不幸的是,没有简单的方法可以做到这一点。本质上,您需要编写一个脚本来遍历其中一个数据库,提取适当的信息,然后将其插入到另一个数据库中,确保管理您获得的新 ID 号并根据需要更新传入信息。模式的复杂性将决定管理的难度,但这是可行的;pg_upgrade 使用此技术的一个版本来处理 Postgres 系统目录内磁盘文件的重新映射。
顺便说一句,这是反对使用代理主键的论点之一。如果您使用完全自然的唯一键,您将能够简单地转储一个数据库并将其加载到另一个数据库中。
归档时间: |
|
查看次数: |
7155 次 |
最近记录: |