Không có câu trả lời nào khác khắc phục được nguyên nhân gốc rễ của vấn đề.
Vấn đề là khi Postgres đưa ra một ngoại lệ, nó sẽ đầu độc các giao dịch trong tương lai trên cùng một kết nối.
Cách khắc phục là khôi phục giao dịch vi phạm:
begin
ActiveRecord...do something...
rescue Exception => e
puts "SQL error in #{ __method__ }"
ActiveRecord::Base.connection.execute 'ROLLBACK'
raise e
end
Xem tài liệu tham khảo.