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

Làm thế nào để nhận thông báo tự động về các thay đổi trong bảng?

donmage khá đúng - LISTENNOTIFY là những gì bạn muốn. Bạn vẫn sẽ cần một vòng lặp thăm dò, nhưng nó rất nhẹ và sẽ không gây ra tải máy chủ có thể phát hiện được.

Nếu bạn muốn psycopg2 để kích hoạt các cuộc gọi lại vào bất kỳ lúc nào trong chương trình của bạn, bạn có thể thực hiện việc này bằng cách tạo một luồng và để luồng đó thực hiện vòng lặp thăm dò. Kiểm tra xem liệu psycopg2 có thực thi quyền truy cập kết nối an toàn theo luồng hay không; nếu không, bạn sẽ cần thực hiện khóa riêng của mình để vòng lặp thăm dò của bạn chỉ chạy khi kết nối không hoạt động và không có truy vấn nào khác làm gián đoạn chu kỳ bỏ phiếu. Hoặc bạn chỉ có thể sử dụng kết nối thứ hai để thăm dò sự kiện của mình.

Dù bằng cách nào, khi luồng nền đang thăm dò các sự kiện thông báo nhận được một luồng, nó có thể gọi hàm gọi lại Python do chương trình chính của bạn cung cấp, hàm này có thể sửa đổi cấu trúc / biến dữ liệu được chia sẻ bởi phần còn lại của chương trình. Hãy cẩn thận, nếu bạn làm điều này, nó có thể nhanh chóng trở thành cơn ác mộng để duy trì.

Nếu bạn thực hiện cách tiếp cận đó, tôi thực sự khuyên bạn nên sử dụng multithreading / multiprocessing các mô-đun. Chúng sẽ giúp cuộc sống của bạn trở nên dễ dàng hơn nhiều, cung cấp các cách đơn giản để trao đổi dữ liệu giữa các chuỗi và hạn chế các sửa đổi do chuỗi lắng nghe thực hiện ở các vị trí đơn giản và được kiểm soát tốt.

Nếu sử dụng các luồng thay vì các quy trình, điều quan trọng là phải hiểu rằng trong cPython (tức là "Python bình thường"), bạn không thể có ngắt gọi lại thực sự, vì chỉ một luồng có thể đang thực thi trong cPython cùng một lúc. Đọc về "khóa thông dịch viên toàn cầu" (GIL) để hiểu thêm về điều này. Do hạn chế này (và tính chất dễ dàng hơn, an toàn hơn của chia sẻ không có gì theo đồng thời mặc định), tôi thường thích đa xử lý hơn đa luồ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. JavaScript (Postgres DB) - Cách sử dụng một câu lệnh đã chuẩn bị sẵn với một mảng làm tham số trong mệnh đề WHERE IN ()

  2. Cách giải quyết các vấn đề về đặc quyền khi khôi phục Cơ sở dữ liệu PostgreSQL

  3. Nâng cấp Slony-I 2.0.x lên phiên bản 2.1.x mới nhất

  4. Làm thế nào để sử dụng ANY thay vì IN trong mệnh đề WHERE với Rails?

  5. Cách giám sát PostgreSQL bằng Nagios