Rails:Oracle约束违规

jus*_*ach 5 oracle ruby-on-rails constraints ora-00001

我正在继承我继承的Rails站点上进行维护工作; 它由Oracle数据库驱动,我可以访问该站点的开发和生产安装(每个都有自己的Oracle DB).我在尝试在生产站点上插入数据时遇到了Oracle错误,但是在开发站点上没有:

ActiveRecord::StatementInvalid (OCIError: ORA-00001: unique constraint (DATABASE_NAME.PK_REGISTRATION_OWNERSHIP) violated: INSERT INTO registration_ownerships (updated_at, company_ownership_id, created_by, updated_by, registration_id, created_at) VALUES ('2006-05-04 16:30:47', 3, NULL, NULL, 2920, '2006-05-04 16:30:47')):
/usr/local/lib/ruby/gems/1.8/gems/activerecord-oracle-adapter-1.0.0.9250/lib/active_record/connection_adapters/oracle_adapter.rb:221:in `execute'
app/controllers/vendors_controller.rb:94:in `create'
Run Code Online (Sandbox Code Playgroud)

据我所知(我使用Navicat作为Oracle客户端),开发站点的数据库架构与实际站点的数据库架构相同.我不是Oracle专家; 任何人都可以解释为什么我会在一次安装而不是另一次安装中得到错误?

顺便提一下,dev和production registration_ownerships表都填充了大量数据,包括country_ownership_id的重复条目(由索引PK_REGISTRATION_OWNERSHIP驱动).如果您需要更多信息进行故障排除,请与我们联系.对不起,我还没有给出更多,但我不确定哪些细节会有所帮助.

更新:我尝试在生产服务器上删除约束但它没有效果; 我也不想放弃索引,因为我不确定后果可能是什么,我不想让生产比现在更不稳定.

奇怪的是,我尝试手动执行抛出错误的SQL,并且Oracle接受了insert语句(尽管我必须使用字符串文字将日期包含在to_date()调用中以绕过"ORA-01861:文字不匹配"格式字符串"错误".这可能会发生什么?

jus*_*ach 0

碰巧的是,目录中有一份“注册”模型的备用副本;即使它有不同的名称(“registrations_2349871.rb”或类似的名称)Rails 运行所有模型功能(保存、验证等)两次,因此违反了关键约束!我以前从未见过这样的行为。删除恶意文件解决了问题。