我们有两个rails应用程序实例,每个实例都与自己的数据库交谈;我们正在使用单个数据库将它们转换为单个应用程序。我们已经制定了需要特定于特定域的部分,才能正常工作;现在我们只需要合并数据库。我们将把一个实例中的数据复制到另一个实例的数据库中,并修正这些ID,使它们不重叠。有很多外键很多的表。这样做的好方法是什么,这样外键仍指向新数据库中的正确行?我们如何合并具有相同模式的两个数据库?
如果这还不清楚,我很乐意使坏ascii艺术复杂化。
我们有两个rails应用程序实例,每个实例都与自己的数据库交谈;我们正在使用单个数据库将它们转换为单个应用程序。我们已经制定了需要特定于特定域的部分,才能正常工作;现在我们只需要合并数据库。我们将把一个实例中的数据复制到另一个实例的数据库中,并修正这些ID,使它们不重叠。有很多外键很多的表。这样做的好方法是什么,这样外键仍指向新数据库中的正确行?我们如何合并具有相同模式的两个数据库?
如果这还不清楚,我很乐意使坏ascii艺术复杂化。
如何将每个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;
大多数关系型数据库,让你标注的外键被限制观看用于指向表中的主键更改时。您可以使用ON UPDATE CASCADE
将外键设置为“自动更新”。对两个数据库中的所有外键执行此操作,然后更新两个数据库中的所有主键,并且所有外键都将自动转换。
+1仅适用于错误的ASCII艺术。 :) – 2011-01-11 20:41:39
-1不仅仅是提供糟糕的ASCII艺术;) – TimoSolo 2012-08-20 13:24:02