継承した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クライアントとして使用しています)、開発サイトのDBスキーマはライブサイトのDBスキーマと同じです。私はOracleの専門家ではありません。誰かが、なぜ私が一方のインストールでエラーが発生し、もう一方のインストールではエラーが発生しないのかを明らかにすることができますか?
ちなみに、devテーブルとproductionregistration_ownershipsテーブルの両方に、country_ownership_id(インデックスPK_REGISTRATION_OWNERSHIPによって駆動される)の重複エントリを含む多くのデータが入力されています。トラブルシューティングのためにさらに情報が必要な場合はお知らせください。まだ申し訳ありませんが、どの詳細が役立つかわかりませんでした。
更新:本番サーバーで制約を削除しようとしましたが、効果がありませんでした。結果がどうなるかわからないので、インデックスも削除したくありませんでした。また、生産の安定性を以前よりも低下させたくありません。
不思議なことに、エラーをスローしていたSQLを手動で実行しようとすると、Oracleは挿入ステートメントを受け入れました(ただし、「ORA-01861:リテラルが一致しませんフォーマット文字列"エラー)。ここで何が起こっているのでしょうか?