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

Làm cách nào để gửi email từ trình kích hoạt PostgreSQL?

Xem bài viết depesz tuyệt vời như thường lệ và pg-message-queue.

Gửi email trực tiếp từ cơ sở dữ liệu có thể không phải là một ý tưởng tuyệt vời. Điều gì sẽ xảy ra nếu phân giải DNS chậm và mọi thứ bị treo trong 30 giây rồi hết thời gian? Điều gì sẽ xảy ra nếu máy chủ thư của bạn gặp sự cố và mất 5 phút để chấp nhận tin nhắn? Bạn sẽ nhận được các phiên cơ sở dữ liệu được treo trong trình kích hoạt của mình cho đến khi bạn ở max_connections và đột nhiên bạn không thể làm gì khác ngoài chờ đợi hoặc bắt đầu hủy giao dịch theo cách thủ công.

Điều tôi khuyên bạn nên sử dụng NOTIFY trình kích hoạt của bạn a LISTEN ing tập lệnh trình trợ giúp vẫn chạy vĩnh viễn và được kết nối với DB (nhưng không phải trong một giao dịch).

Tất cả những gì trình kích hoạt của bạn phải làm là INSERT một hàng vào bảng hàng đợi và gửi THÔNG BÁO . Tập lệnh của bạn nhận được NOTIFY vì nó đã đăng ký LISTEN đối với nó, kiểm tra bảng hàng đợi và thực hiện phần còn lại.

Bạn có thể viết chương trình trợ giúp bằng bất kỳ ngôn ngữ nào thuận tiện; Tôi thường sử dụng Python với psycopg2 .

Tập lệnh đó có thể gửi email dựa trên thông tin mà nó tìm thấy trong cơ sở dữ liệu. Bạn không phải thực hiện tất cả các định dạng văn bản xấu xí trong PL / PgSQL, thay vào đó bạn có thể thay thế mọi thứ thành một mẫu bằng một ngôn ngữ kịch bản mạnh mẽ hơn và chỉ cần tìm nạp dữ liệu biến từ cơ sở dữ liệu khi mã NOTIFY đi vào.

Với cách tiếp cận này, người trợ giúp của bạn có thể gửi từng tin nhắn và chỉ sau đó xóa thông tin khỏi bảng hàng đợi. Bằng cách đó, nếu có sự cố tạm thời với hệ thống thư của bạn khiến việc gửi không thành công, bạn sẽ không bị mất thông tin và có thể tiếp tục cố gắng gửi cho đến khi thành công.

Nếu bạn thực sự phải thực hiện việc này trong cơ sở dữ liệu, hãy xem PgMail.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. không thể tạo khóa chính tự động tăng thêm bằng flask-sqlalchemy

  2. Postgres không thành công với 'không thể mở tệp ánh xạ quan hệ global / pg_filenode.map'

  3. Các công cụ ETL tốt nhất để chuyển sang PostgreSQL

  4. Tự động tạo các cột cho bảng chéo trong PostgreSQL

  5. Làm thế nào để cài đặt một gói Python trên Linux để nó được tìm thấy bởi phần mở rộng PostgreSQL 13 plpython3u đã hoạt động?