gpt4 book ai didi

ruby-on-rails - rails : Oracle constraint violation

转载 作者:行者123 更新时间:2023-12-03 07:32:03 24 4
gpt4 key购买 nike

我正在我继承的 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'

据我所知(我使用 Navicat 作为 Oracle 客户端),开发站点的数据库架构与实时站点的数据库架构相同。我不是 Oracle 专家;谁能解释为什么我会在一个安装而不是另一个安装中出现错误?

顺便提一下,dev 和 production registration_ownerships 表都填充了大量数据,包括 country_ownership_id 的重复条目(由索引 PK_REGISTRATION_OWNERSHIP 驱动)。如果您需要更多信息来排除故障,请告诉我。很抱歉,我还没有提供更多信息,但我不确定哪些细节会有所帮助。

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

奇怪的是,我尝试手动执行抛出错误的 SQL,Oracle 接受了插入语句(尽管我不得不用字符串文字将日期包装在 to_date() 调用中以绕过“ORA-01861:文字不匹配”格式字符串”错误)。这里可能会发生什么?

最佳答案

基于约束的名称,PK_REGISTRATION_OWNERSHIP ,您有主键违规。如果这些数据库没有同步维护这些数据,那么某事/某人已经在 registration_ownerships 中插入了一条记录。生产数据库中的表 company_ownership_id =2 & registration_id =2920。 (我根据名字猜测具体情况)

如果生产数据库中需要存在这组特定的值,

1)检查已经存在的内容不是您要插入的内容。如果是,你就完成了。

2)如果您需要按原样插入示例数据,您需要修改现有数据并重新插入它(以及所有相关/引用记录),然后您可以插入您的值。

关于ruby-on-rails - rails : Oracle constraint violation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2624766/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com