2011-01-11 369 views
4

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

如果这还不清楚,我很乐意使坏ascii艺术复杂化。

+3

+1仅适用于错误的ASCII艺术。 :) – 2011-01-11 20:41:39

+0

-1不仅仅是提供糟糕的ASCII艺术;) – TimoSolo 2012-08-20 13:24:02

回答

2

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

这样ID 1在db 1和db 2上变为11,因为主键和外键都经历了相同的更改,所以不必担心记录如何关联,只需进行更新具有相同的公式。

所以它会去像

分贝的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; 
3

大多数关系型数据库,让你标注的外键被限制观看用于指向表中的主键更改时。您可以使用ON UPDATE CASCADE将外键设置为“自动更新”。对两个数据库中的所有外键执行此操作,然后更新两个数据库中的所有主键,并且所有外键都将自动转换。

相关问题