PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Rails 3 игнорира изключение за уникално ограничение на Postgres

Като цяло обработката на изключения трябва да е в най-близката точка до грешката, в която можете да направите нещо разумно с изключението. Във вашия случай бихте искали вашето rescue във вашия цикъл, например:

stuff.each do |h|
  begin
    Model.create(h)
  rescue ActiveRecord::RecordNotUnique => e
    next if(e.message =~ /unique.*constraint.*INDEX_NAME_GOES_HERE/)
    raise
  end
end

Няколко интересни точки:

  1. Нарушение на ограничение в базата данни ще ви даде ActiveRecord::RecordNotUnique грешка, а не основната PG::Error . AFAIK, ще получите PG::Error ако разговаряте директно с базата данни, вместо да минавате през ActiveRecord.
  2. Заменете INDEX_NAME_GOES_HERE с истинското име на уникалния индекс.
  3. Искате да игнорирате само конкретното нарушение на ограничението, което очаквате, следователно next if(...) бит, последван от raise без аргументи (т.е. повдигнете повторно изключението, ако не е това, което очаквате да видите).


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как Postgresql COPY TO STDIN с CSV се актуализира при конфликт?

  2. Сравнителен анализ на Postgres-XL

  3. Изчисляване на дата в Postgres чрез добавяне на месеци?

  4. Получаване на неизвестен първичен ключ за таблица, докато идентификаторът е там

  5. docker-compose postgres рестартиране след изпълнение на скриптове в docker-entrypoint-initdb.d