Tidak ada jawaban lain yang memperbaiki akar penyebab dari masalah ini.
Masalahnya adalah ketika Postgres memunculkan pengecualian, itu meracuni transaksi di masa mendatang pada koneksi yang sama.
Cara mengatasinya adalah mengembalikan transaksi yang melanggar:
begin
ActiveRecord...do something...
rescue Exception => e
puts "SQL error in #{ __method__ }"
ActiveRecord::Base.connection.execute 'ROLLBACK'
raise e
end
Lihat referensi.