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

Bagaimana saya bisa mengirim email dari pemicu PostgreSQL?

Lihat artikel depesz excellent-as-usual, dan pg-message-queue.

Mengirim email langsung dari database mungkin bukan ide yang bagus. Bagaimana jika resolusi DNS lambat dan semuanya hang selama 30 detik lalu habis? Bagaimana jika server email Anda goyah dan membutuhkan waktu 5 menit untuk menerima pesan? Anda akan mendapatkan sesi database yang terhenti di pemicu Anda sampai Anda berada di max_connections dan tiba-tiba Anda tidak dapat melakukan apa pun selain menunggu atau mulai membatalkan transaksi secara manual.

Yang saya sarankan adalah memicu NOTIFY sebuah LISTEN ing skrip pembantu yang tetap berjalan secara permanen dan terhubung ke DB (tetapi tidak dalam transaksi).

Yang harus dilakukan pemicu Anda adalah INSERT baris ke dalam tabel antrian dan mengirim NOTIFY . Skrip Anda mendapatkan NOTIFY pesan karena telah terdaftar ke LISTEN untuk itu, memeriksa tabel antrian, dan melakukan sisanya.

Anda dapat menulis program pembantu dalam bahasa apa pun yang nyaman; Saya biasanya menggunakan Python dengan psycopg2 .

Script itu dapat mengirim email berdasarkan informasi yang ditemukannya di database. Anda tidak perlu melakukan semua pemformatan teks jelek di PL/PgSQL, Anda dapat menggantinya menjadi template dalam bahasa skrip yang lebih kuat, dan cukup ambil data variabel dari database saat NOTIFY masuk.

Dengan pendekatan ini, pembantu Anda dapat mengirim setiap pesan dan hanya kemudian menghapus info dari tabel antrian. Dengan begitu jika ada masalah sementara dengan sistem email Anda yang menyebabkan pengiriman gagal, Anda tidak kehilangan info dan dapat terus mencoba mengirimnya sampai Anda berhasil.

Jika Anda benar-benar harus melakukan ini di database, lihat 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. Tambahkan Tahun ke Tanggal di PostgreSQL

  2. Kueri untuk menghitung nilai yang berbeda dalam rentang tanggal bergulir

  3. Cara mengganti basis data menggunakan PostgreSQL

  4. Bagaimana cara menambahkan kolom jika tidak ada di PostgreSQL?

  5. Membandingkan Opsi Cloud Database untuk PostgreSQL