是否可以合并两个 Postgres 数据库
Is it possible to merge two Postgres databases
我们有一个基于 SQLite 的简单应用程序的两个副本。该应用程序有 10 个表,表之间有各种关系。我们想将这些数据库合并到一个具有相同模式的 Postgres 数据库中。我们可以使用 Talend 来促进这一点,但问题是会有重复的键(因为两个源数据库都是独立的)。有没有系统的方法可以使用原始键加上加载第一个数据库产生的偏移量将数据插入 Postgres?
步骤 1. 恢复第一个数据库。
第2步.通过添加选项on update cascade
更改所有表的外键。
例如,如果列 table_b.a_id
引用列 table_a.id
:
alter table table_b
drop constraint table_b_a_id_fkey,
add constraint table_b_a_id_fkey
foreign key (a_id) references table_a(id)
on update cascade;
第 3 步。通过添加所需的偏移量来更新表的主键,例如:
update table_a
set id = 10000+ id;
步骤 4. 恢复第二个数据库。
如果您可以使用数据库架构编辑脚本(或使用您自己的脚本手动进行传输),您可以合并步骤 1 和 2 并在恢复前编辑脚本(添加选项 on update cascade
用于表声明中的外键)。
我们有一个基于 SQLite 的简单应用程序的两个副本。该应用程序有 10 个表,表之间有各种关系。我们想将这些数据库合并到一个具有相同模式的 Postgres 数据库中。我们可以使用 Talend 来促进这一点,但问题是会有重复的键(因为两个源数据库都是独立的)。有没有系统的方法可以使用原始键加上加载第一个数据库产生的偏移量将数据插入 Postgres?
步骤 1. 恢复第一个数据库。
第2步.通过添加选项on update cascade
更改所有表的外键。
例如,如果列 table_b.a_id
引用列 table_a.id
:
alter table table_b
drop constraint table_b_a_id_fkey,
add constraint table_b_a_id_fkey
foreign key (a_id) references table_a(id)
on update cascade;
第 3 步。通过添加所需的偏移量来更新表的主键,例如:
update table_a
set id = 10000+ id;
步骤 4. 恢复第二个数据库。
如果您可以使用数据库架构编辑脚本(或使用您自己的脚本手动进行传输),您可以合并步骤 1 和 2 并在恢复前编辑脚本(添加选项 on update cascade
用于表声明中的外键)。