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.