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

pgbouncer - đóng vì:máy chủ không sạch trên mọi kết nối

Ok, tôi nghĩ rằng tôi đã tìm ra điều này. Vấn đề nằm ở một vấn đề lâu dài với Django và Psycopg2. Về cơ bản, Psycopg2 sẽ tự động đưa ra câu lệnh BEGIN cho DB. Tuy nhiên, nếu Django cho rằng không có sửa đổi dữ liệu nào xảy ra, thì Django sẽ không đưa ra CAM KẾT khi kết thúc giao dịch.

Có một vài giải pháp cho vấn đề này, hãy xem http:// www. slideshare.net/OReillyOSCON/unbreak-your-django-application để biết thêm chi tiết. Lý tưởng nhất là bạn tắt các cam kết tự động (bằng cách đặt autocommit =True trong cài đặt DB của bạn, quy ước đặt tên khó xử). Điều này ngăn chặn các giao dịch trên các hàm chỉ đọc mà còn trên các hàm ghi, vì vậy bạn cần phải gói các hàm đó theo cách thủ công trong trình trang trí @commit_on_success.

Ngoài ra, chỉ cần thêm django.middleware.transaction.TransactionMiddleware vào các lớp Middleware của bạn. Điều này sẽ bao gồm mọi yêu cầu trong một giao dịch. Điều này cũng có nghĩa là gói các yêu cầu chỉ đọc trong một giao dịch một cách không cần thiết, nhưng đó là một giải pháp nhanh chóng và hiệu quả.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql 11:Lỗi cuộc gọi thủ tục đã lưu trữ - Để gọi một thủ tục, hãy sử dụng CALL, Java

  2. Làm cách nào để thay đổi định dạng ngày trong Postgres?

  3. Điền vào bảng với dữ liệu cho ngày bị thiếu (postgresql, redshift)

  4. django.db.utils.IntegrityError:column venue_city chứa giá trị null

  5. hàm UNIX_TIMESTAMP không tồn tại