PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

ActiveRecord::StatementInvalid:PG InFailedSqlTransaction

Keine der anderen Antworten behebt die Grundursache des Problems.

Das Problem ist, dass Postgres, wenn es eine Ausnahme auslöst, zukünftige Transaktionen auf derselben Verbindung vergiftet.

Die Lösung besteht darin, die fehlerhafte Transaktion rückgängig zu machen:

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

  raise e
end

Siehe Referenz.