Žádná z dalších odpovědí nevyřeší hlavní příčinu problému.
Problém je v tom, že když Postgres vyvolá výjimku, otráví budoucí transakce na stejném připojení.
Řešením je vrátit zpět problematickou transakci:
begin
ActiveRecord...do something...
rescue Exception => e
puts "SQL error in #{ __method__ }"
ActiveRecord::Base.connection.execute 'ROLLBACK'
raise e
end
Viz odkaz.