sql >> Database >  >> RDS >> PostgreSQL

Rails 3 negeert de unieke beperkingsuitzondering van Postgres

Over het algemeen moet uw afhandeling van uitzonderingen zo dicht mogelijk bij de fout liggen dat u iets verstandigs kunt doen met de uitzondering. In jouw geval wil je je rescue in je lus, bijvoorbeeld:

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

Een paar aandachtspunten:

  1. Een schending van een beperking in de database geeft u een ActiveRecord::RecordNotUnique fout in plaats van de onderliggende PG::Error . AFAIK, je krijgt een PG::Error als u rechtstreeks met de database praatte in plaats van door ActiveRecord te gaan.
  2. Vervang INDEX_NAME_GOES_HERE met de echte naam van de unieke index.
  3. U wilt alleen de specifieke schending van de beperking negeren die u verwacht, vandaar de next if(...) bit gevolgd door de argumentloze raise (d.w.z. verhoog de uitzondering als het niet is wat je verwacht te zien).


  1. pgAdmin 4 ver. 1.5 - geen foutmeldingen

  2. Event Scheduler zou elke maand moeten worden uitgevoerd

  3. Waar kan ik het jdbc-stuurprogramma op Netbeans/Glassfish in Windows toevoegen?

  4. Object converteren naar CLOB