sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan kan jeg sende e-mail fra PostgreSQL trigger?

Se den fremragende-som-sædvanlige depesz-artikel og pg-besked-kø.

Det er måske ikke en god idé at sende e-mail direkte fra databasen. Hvad hvis DNS-opløsningen er langsom, og alt hænger i 30 sekunder og derefter timeout? Hvad hvis din e-mail-server ryger og tager 5 minutter at acceptere beskeder? Du vil få databasesessioner hængt op i din trigger, indtil du er ved max_connections og pludselig kan du ikke gøre andet end at vente eller begynde manuelt at annullere transaktioner.

Det, jeg vil anbefale, er at have din trigger NOTIFY en LISTEN et hjælpescript, der forbliver permanent kørende og forbundet til DB'en (men ikke i en transaktion).

Det eneste, din trigger skal gøre, er INSERT en række ind i en køtabel og send en NOTIFY . Dit script får NOTIFY besked, fordi den er registreret til LISTEN for det, undersøger køtabellen og klarer resten.

Du kan skrive hjælpeprogrammet på et hvilket som helst sprog, der passer dig; Jeg bruger normalt Python med psycopg2 .

Dette script kan sende e-mailen baseret på oplysninger, det finder i databasen. Du behøver ikke at lave al den grimme tekstformatering i PL/PgSQL, du kan erstatte ting med en skabelon i et mere kraftfuldt scriptsprog i stedet, og bare hente de variable data fra databasen, når en NOTIFY kommer ind.

Med denne tilgang kan din hjælper sende hver besked og først derefter fjerne informationen fra køtabellen. På den måde, hvis der er forbigående problemer med dit mailsystem, der får afsendelsen til at mislykkes, har du ikke mistet oplysningerne og kan fortsætte med at forsøge at sende dem, indtil det lykkes.

Hvis du virkelig skal gøre dette i databasen, se PgMail.



  1. SQL Group BY, Top N elementer for hver gruppe

  2. ORA-01031:utilstrækkelige rettigheder ved valg af visning

  3. Sådan laver du sql-tuning i Oracle

  4. Forbered en ny VM til SQL Server 2014 CTP1