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

kesalahan postgresql:membatalkan pernyataan karena permintaan pengguna

Kami telah menemukan penyebab masalah ini. Ini dijelaskan oleh implementasi buggy dari setQueryTimeout() di driver JDBC terbaru 9.2-100x. Ini mungkin tidak terjadi jika Anda membuka/menutup koneksi secara manual, tetapi sangat sering terjadi dengan penggabungan koneksi dan autocommit disetel ke salah . Dalam hal ini, setQueryTimeout() harus dipanggil dengan nilai bukan nol (sebagai contoh, menggunakan anotasi Spring framework @Transactional( timeout =xxx ).

Ternyata, setiap kali pengecualian SQL dimunculkan selama eksekusi pernyataan, penghitung waktu pembatalan belum dibatalkan dan tetap hidup (begitulah penerapannya). Karena pooling, koneksi di belakang tidak ditutup tetapi dikembalikan ke pool. Kemudian, saat timer pembatalan dipicu, secara acak membatalkan kueri yang saat ini terkait dengan koneksi yang dibuat oleh timer ini. Saat ini, ini adalah kueri yang sama sekali berbeda yang menjelaskan efek keacakan.

Solusi yang disarankan adalah menyerah pada setQueryTimeout() dan menggunakan konfigurasi PostgreSQL sebagai gantinya (statement_timeout). Itu tidak memberikan tingkat fleksibilitas yang sama tetapi setidaknya selalu berhasil.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Indeks tabel untuk kolom array Teks[]

  2. Spring Boot REST · @Constraint untuk dihapus?

  3. Bagaimana cara mengakses tabel dalam skema tanpa harus menggunakan awalan skema (Postgres + PHP)?

  4. Asosiasi dalam sekuel tidak berfungsi sebagaimana mestinya

  5. Konfigurasikan JPA/Hibernate/PostgreSQL tanpa XML