sql >> Database >  >> RDS >> PostgreSQL

ActiveRecord::StatementInvalid:PG InFailedSqlTransaction

Geen van de andere antwoorden lost de hoofdoorzaak op van het probleem.

Het probleem is dat wanneer Postgres een uitzondering maakt, het toekomstige transacties op dezelfde verbinding vergiftigt.

De oplossing is om de gewraakte transactie terug te draaien:

begin
  ActiveRecord...do something...
rescue Exception => e
  puts "SQL error in #{ __method__ }"
  ActiveRecord::Base.connection.execute 'ROLLBACK'

  raise e
end

Zie referentie.



  1. Een vooraf ingevulde database werkt niet bij API 28 genereert geen dergelijke tabeluitzondering

  2. Wijzigen hoe isql SQL uitvoert

  3. Voorkom automatische verhoging van InnoDB OP DUPLICATE KEY

  4. PostgreSQL-query wordt sneller uitgevoerd met indexscan, maar engine kiest hash-join