Ingen af de andre svar løser rodårsagen af spørgsmålet.
Problemet er, at når Postgres rejser en undtagelse, forgifter det fremtidige transaktioner på den samme forbindelse.
Rettelsen er at rulle tilbage den fornærmende transaktion:
begin
ActiveRecord...do something...
rescue Exception => e
puts "SQL error in #{ __method__ }"
ActiveRecord::Base.connection.execute 'ROLLBACK'
raise e
end
Se reference.