是否可以合并两个Postgres数据库

sky*_*man 2 sqlite postgresql talend

我们有一个基于 SQLite 的简单应用程序的两个副本。该应用程序有 10 个表,表之间有各种关系。我们希望将数据库合并到具有相同架构的单个 Postgres 数据库。我们可以使用 Talend 来实现这一点,但问题是会出现重复的键(因为两个源数据库都是独立的)。是否有一种系统方法可以让我们使用原始键加上加载第一个数据库产生的偏移量将数据插入到 Postgres 中?

kli*_*lin 5

步骤 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;
Run Code Online (Sandbox Code Playgroud)

步骤 3. 通过添加所需的偏移量来更新表的主键,例如:

update table_a
set id = 10000+ id;
Run Code Online (Sandbox Code Playgroud)

步骤 4. 恢复第二个数据库。

如果您可以使用数据库架构编辑脚本(或使用您自己的脚本手动进行传输),则可以合并步骤 1 和 2,并在恢复之前编辑脚本(on update cascade在表声明中添加外键选项)。