sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur kan jag skicka e-post från PostgreSQL trigger?

Se den utmärkta som vanligt depesz-artikeln och pg-meddelandekön.

Att skicka e-post direkt från databasen kanske inte är en bra idé. Vad händer om DNS-upplösningen är långsam och allt hänger sig i 30 sekunder och sedan timeout? Vad händer om din e-postserver har en vinglig och tar 5 minuter acceptera meddelanden? Du kommer att få databassessioner hängda i din trigger tills du är på max_connections och plötsligt kan du inte göra annat än att vänta eller börja manuellt avbryta transaktioner.

Det jag skulle rekommendera är att ha utlösaren NOTIFY en LISTEN ett hjälpskript som körs permanent och är anslutet till databasen (men inte i en transaktion).

Allt din utlösare behöver göra är att INSERT en rad i en kötabell och skicka en NOTIFY . Ditt skript får NOTIFY meddelande eftersom det har registrerats för LISTEN för det, undersöker kötabellen och gör resten.

Du kan skriva hjälpprogrammet på vilket språk som helst; Jag använder vanligtvis Python med psycopg2 .

Det skriptet kan skicka e-postmeddelandet baserat på information som det hittar i databasen. Du behöver inte göra all ful textformatering i PL/PgSQL, du kan istället byta ut saker i en mall på ett kraftfullare skriptspråk och bara hämta variabeldata från databasen när en NOTIFY kommer in.

Med detta tillvägagångssätt kan din hjälpare skicka varje meddelande och först därefter ta bort informationen från kötabellen. På det sättet om det finns tillfälliga problem med ditt e-postsystem som gör att sändningen misslyckas, har du inte förlorat informationen och kan fortsätta att försöka skicka den tills du lyckas.

Om du verkligen måste göra detta i databasen, se PgMail.



  1. Hur man hittar dubbletter av värden i en SQL-tabell

  2. LAST_DAY() Funktion i Oracle

  3. Bifoga ett innehållsdokument till ett anpassat Salesforce-objekt

  4. Java Enums, JPA och Postgres enums - Hur får jag dem att fungera tillsammans?