Я занимаюсь обслуживанием сайта Rails, который унаследовал; он управляется базой данных Oracle, и у меня есть доступ как к разработке, так и к производственной установке сайта (каждая со своей собственной базой данных Oracle). Я сталкиваюсь с ошибкой 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: literal" не соответствует строке формата "ошибка). Что здесь может происходить?