我们有一个基于SQLite的简单应用程序的两个副本。该应用程序有10个表,表之间有各种关系。我们希望将数据库合并到具有相同模式的单个Postgres数据库。我们可以使用Talend来促进这一点,但问题是会有重复的密钥(因为两个源数据库都是独立的)。是否有一种系统的方法,我们可以使用原始密钥和加载第一个数据库产生的偏移量将数据插入Postgres?
答案 0 :(得分:3)
步骤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
对于表声明中的外键)。