我有一个Ruby on Rails应用程序,它有两个活动环境Stage
和Production
。我们的开发团队一直使用Stage
,但我们希望出于各种原因将数据移到生产服务器上。但是,新数据库中存在冲突的ID,因此它不像从一个位置拉取数据并将其插入另一个位置那么简单。例如,假设我们有一个名为Widgets的表:
Widget:
id: 9836
name: "Staging widget"
parent_id: 9635
container_id: 533
如果以上数据是我们的小部件之一,我们无法进行导入,因为已经存在ID 9836
的小部件和/或已经有ID 533
的容器,这意味着我们在将小部件放入其中之前,需要抓取关联链以构造新容器。
我们正在为这两种环境使用MySQL数据库。我考虑过进行导入,只是在_id
结尾的所有相应列中添加10,000,因为它会让我们超越冲突边界,但这似乎是一个糟糕的解决方案。
是否有任何可以帮助我解决此问题的工具,项目或想法?
答案 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文件。