PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

lỗi postgresql:hủy tuyên bố do yêu cầu của người dùng

Chúng tôi đã tìm ra nguyên nhân của vấn đề này. Nó được giải thích bằng cách triển khai lỗi setQueryTimeout () trong các trình điều khiển JDBC mới nhất 9.2-100x. Điều này có thể không xảy ra nếu bạn mở / đóng kết nối theo cách thủ công, nhưng rất thường xảy ra với việc kết hợp kết nối tại chỗ và tự động gửi đặt thành false . Trong trường hợp này, setQueryTimeout () phải được gọi với giá trị khác 0 (ví dụ:sử dụng chú thích Spring framework @Transactional (timeout =xxx)).

Hóa ra, bất cứ khi nào ngoại lệ SQL được đưa ra trong quá trình thực thi câu lệnh, bộ đếm thời gian hủy bỏ vẫn chưa bị hủy bỏ và vẫn tồn tại (đó là cách nó được triển khai). Vì gộp chung, kết nối phía sau không bị đóng mà được trả lại cho nhóm. Sau đó, khi bộ hẹn giờ hủy kích hoạt, nó sẽ hủy ngẫu nhiên truy vấn hiện được liên kết với kết nối mà bộ hẹn giờ này đã được tạo. Tại thời điểm này, đó là một truy vấn hoàn toàn khác giải thích hiệu ứng ngẫu nhiên.

Giải pháp được đề xuất là từ bỏ setQueryTimeout () và sử dụng cấu hình PostgreSQL thay thế (statement_timeout). Nó không cung cấp mức độ linh hoạt như nhau nhưng ít nhất là luôn hoạt động.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao chuỗi id SQL không đồng bộ (cụ thể là sử dụng Postgres)?

  2. biến giá trị riêng biệt của các cột thành một hàng postgres

  3. Cách tạo một select với mảng chứa mệnh đề giá trị trong psql

  4. Truy vấn PostgreSQL với các cột động và số lượng từ phép tham gia

  5. Đang tải các từ dừng từ Postgresql sang Solr6