Mysql 由同一列上的两个约束引起的重复外键约束
背景:Rails项目(最近从4.2.1更新到4.2.5.2),6年内编写了267个迁移文件。此项目维护其他3个Rails应用程序使用的数据库迁移(其中禁用了db任务) 为了在新机器中建立数据库和表以供开发,我们总是使用生产转储。但我最近尝试运行了Mysql 由同一列上的两个约束引起的重复外键约束,mysql,ruby-on-rails,ruby,activerecord,rails-activerecord,Mysql,Ruby On Rails,Ruby,Activerecord,Rails Activerecord,背景:Rails项目(最近从4.2.1更新到4.2.5.2),6年内编写了267个迁移文件。此项目维护其他3个Rails应用程序使用的数据库迁移(其中禁用了db任务) 为了在新机器中建立数据库和表以供开发,我们总是使用生产转储。但我最近尝试运行了rakedb:migrate,得到了这个结果 Mysql2::Error: Failed to open the referenced table 'referrer_organizations': ALTER TABLE `organization_r
rakedb:migrate
,得到了这个结果
Mysql2::Error: Failed to open the referenced table 'referrer_organizations': ALTER TABLE `organization_referrals` ADD CONSTRAINT `fk_rails_aded077271`
导致此问题的迁移文件是
class CreateOrganizationReferrals
很久以前,我在4.2.1中运行了rakedb:migrate。不知道为什么在4.2.5.2中我会遇到这个问题。这可能是因为4.2.5.2吗
所以我做了一些搜索,虽然我会使用schema.rb
来加载模式,而不是依赖rakedb:migrate
。但发生了另一个错误
ActiveRecord::StatementInvalid: Mysql2::Error: Duplicate foreign key constraint name 'fk_rails_0213c2b87e'
因此,我深入到schema.rb中,发现了重复的行
添加外键“jobspikr\u数据查询”、“jobspikr\u组织”
添加外键“jobspikr\u数据查询”、“jobspikr\u组织”
然后我查看了sql转储,发现了这个
CONSTRAINT `fk_rails_9b58d2d0ef` FOREIGN KEY (`jobspikr_organization_id`) REFERENCES `jobspikr_organizations` (`id`),
CONSTRAINT `fk_rails_f41d37972f` FOREIGN KEY (`jobspikr_organization_id`) REFERENCES `jobspikr_organizations` (`id`)
在同一个表中的同一列上出现这两个约束的原因是什么
为了解决这个问题,我创建了一个新的迁移文件,如下所示,以删除一个外键约束
remove_foreign_key:jobspikr_data_querys,column::jobspikr_organization_id
然后在我的开发机器上运行它,然后转储模式,在测试环境中运行新模式,它工作得很好
在我的生产环境中删除如上所示的外键约束是否安全。如果我这样做,数据会有问题吗