sql >> Database teknologi >  >> RDS >> PostgreSQL

Rails 3 ignorerer Postgres unikke begrænsningsundtagelse

Generelt bør din undtagelseshåndtering være tættest på fejlen, at du kan gøre noget fornuftigt med undtagelsen. I dit tilfælde vil du gerne have din rescue inde i din løkke, for eksempel:

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

Et par interessepunkter:

  1. En overtrædelse af begrænsninger inde i databasen vil give dig en ActiveRecord::RecordNotUnique fejl snarere end den underliggende PG::Error . AFAIK, du vil få en PG::Error hvis du talte direkte til databasen i stedet for at gå gennem ActiveRecord.
  2. Erstat INDEX_NAME_GOES_HERE med det rigtige navn på det unikke indeks.
  3. Du ønsker kun at ignorere den specifikke overtrædelse af begrænsninger, som du forventer, derfor next if(...) bit efterfulgt af den argumentløse raise (dvs. genhæv undtagelsen, hvis det ikke er det, du forventer at se).


  1. MySQL 5.7:konverter simpel JSON_ARRAY til rækker

  2. Importer 'xml' til SQL Server

  3. Betinget ORDER BY afhængig af kolonneværdier

  4. Hvad betyder et kolon før et bogstaveligt tal i en SQL-sætning?