Inget av de andra svaren fixar grundorsaken av frågan.
Problemet är att när Postgres tar upp ett undantag förgiftar det framtida transaktioner på samma anslutning.
Lösningen är att återställa den felande transaktionen:
begin
ActiveRecord...do something...
rescue Exception => e
puts "SQL error in #{ __method__ }"
ActiveRecord::Base.connection.execute 'ROLLBACK'
raise e
end
Se referens.