Nenhuma das outras respostas corrige a causa raiz da questão.
O problema é que quando o Postgres gera uma exceção, ele envenena transações futuras na mesma conexão.
A correção é reverter a transação ofensiva:
begin
ActiveRecord...do something...
rescue Exception => e
puts "SQL error in #{ __method__ }"
ActiveRecord::Base.connection.execute 'ROLLBACK'
raise e
end
Veja referência.