我们如何合并具有相同模式的两个数据库?

我们有两个rails应用程序实例,每个实例都与自己的数据库通信; 我们正在使用单个数据库将它们转换为单个应用程序。 我们已经使得需要特定于特定域的部分正常工作; 现在我们只需要合并数据库。 我们要将数据从一个实例复制到另一个实例的数据库中,并修复ID以使它们不重叠。 有很多表有很多外键。 这样做的好方法是什么,外键仍然指向新数据库中的正确行?

如果不清楚,我很高兴用糟糕的ascii艺术复杂化问题。

大多数关系数据库允许您注释要限制的外键,以便在指向表中的主键更改时进行监视。 使用ON UPDATE CASCADE时,可以将外键设置为“自动更新”。 对两个数据库中的所有外键执行此操作,然后更新两个数据库中的所有主键,并自动转换所有外键。

如何将每个id列(包括外键)更新为其原始值乘以10,然后为第一个数据库添加1,为第二个数据库添加2。

这样,id 1在db 1上变为11,在db 2上变为12。由于主键和外键都经历了相同的更改,因此您不必担心记录的相关性,只需使用相同的公式进行更新即可。

所以它会像

在db 1上:

 UPDATE user SET id = id * 10 + 1; UPDATE privilege SET id = id * 10 + 1, user_id = user_id * 10 + 1; 

在db 2上:

 UPDATE user SET id = id * 10 + 2; UPDATE privilege SET id = id * 10 + 2, user_id = user_id * 10 + 2;