通过隐藏ID字段从一个数据库导入到另一个数据库

时间:2010-09-29 13:35:31

标签: mysql ruby-on-rails database activerecord import

我有一个Ruby on Rails应用程序,它有两个活动环境StageProduction。我们的开发团队一直使用Stage,但我们希望出于各种原因将数据移到生产服务器上。但是,新数据库中存在冲突的ID,因此它不像从一个位置拉取数据并将其插入另一个位置那么简单。例如,假设我们有一个名为Widgets的表:

Widget:
  id: 9836
  name: "Staging widget"
  parent_id: 9635
  container_id: 533

如果以上数据是我们的小部件之一,我们无法进行导入,因为已经存在ID 9836的小部件和/或已经有ID 533的容器,这意味着我们在将小部件放入其中之前,需要抓取关联链以构造新容器。

我们正在为这两种环境使用MySQL数据库。我考虑过进行导入,只是在_id结尾的所有相应列中添加10,000,因为它会让我们超越冲突边界,但这似乎是一个糟糕的解决方案。

是否有任何可以帮助我解决此问题的工具,项目或想法?

3 个答案:

答案 0 :(得分:1)

过去,我通过使我导入的数据的所有ID都为负,以一种愚蠢的方式解决了这个问题。这仅适用于您的ID列已签名,当然最多只有两个数据源。

答案 1 :(得分:1)

如果您不能使用否定ID,只需在所有导入的ID中添加一个数字即可。该数字必须大于目标数据库中的最大ID。

答案 2 :(得分:0)

那么,你应该做什么(我假设这是基于标签的MySQL)是运行以下SQL(我不是一个RoRails的人,而是一个带有MySQL的PHP​​,所以如果这不适用的话,我会解散) :

此帖子标识one basic idea

另一种选择是使用像phpMyAdmin这样的程序(是的,它是php),它本质上是一个数据库GUI工具。使用phpMyAdmin,您可以导出表的选择字段。只需导出所有数据,除了ID字段,然后您就可以运行该数据的导入。

这部分我有点模糊。我认为你有一个包含Widget内容的实际文件。如果是这样,请创建一个遍历每行数据的脚本并生成Widget文件。