PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Mengapa transaksi PostgreSQL ini memberikan PERINGATAN:tidak ada transaksi yang sedang berlangsung

Ini sepertinya salah paham. Pertimbangkan penekanan berani saya :

PERINGATAN jelas milik transaksi bersamaan yang berbeda , yang tidak memulai transaksi eksplisit. commit salah tempat di sana , karena beroperasi dalam mode komit otomatis.

Jika Anda terus membaca log Anda, Anda mungkin akan menemukan entri untuk komit lebih jauh ke bawah:

Debug

Jika Anda tidak menemukan itu atau rollback entri atau kesalahan, saya akan memeriksa masalah di aplikasi Anda meninggalkan transaksi zombi yang tidak terikat, yang akan menjadi hal buruk .

Mulai penyelidikan dengan memeriksa tampilan sistem pg_stat_activity saat terhubung ke database Anda:

SELECT *
FROM   pg_stat_activity
WHERE  datname = current_database()  -- only current database
AND    pid <> pg_backend_pid()       -- except your current session
AND    state LIKE 'idle%';

state nilai idle tidak selalu mencurigakan - hanya sesi yang menunggu input.
Tapi idle in transaction dan idle in transaction (aborted) adalah.

Selengkapnya di manual di sini atau jawaban terkait ini:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengubah skema beberapa tabel PostgreSQL dalam satu operasi?

  2. Menghancurkan DB Postgres di Heroku

  3. Bagaimana saya bisa meninjau semua database dan hibah objek untuk suatu peran?

  4. PG::ForeignKeyViolation:ERROR:perbarui atau hapus pada tabel xxx melanggar batasan kunci asing

  5. Lihat dan hapus cache/buffer Postgres?