Żadna z pozostałych odpowiedzi nie rozwiązuje pierwotnej przyczyny problemu.
Problem polega na tym, że gdy Postgres zgłasza wyjątek, zatruwa przyszłe transakcje na tym samym połączeniu.
Rozwiązaniem jest wycofanie obraźliwej transakcji:
begin
ActiveRecord...do something...
rescue Exception => e
puts "SQL error in #{ __method__ }"
ActiveRecord::Base.connection.execute 'ROLLBACK'
raise e
end
Zobacz odniesienie.