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.