sql >> Databáze >  >> RDS >> PostgreSQL

Jak mohu odeslat e-mail ze spouštěče PostgreSQL?

Podívejte se na vynikající jako obvykle článek depesz a pg-message-queue.

Posílání e-mailů přímo z databáze nemusí být dobrý nápad. Co když je překlad DNS pomalý a vše se na 30 sekund zasekne a pak vyprší časový limit? Co když váš poštovní server kolísá a trvá to 5 minut přijímat zprávy? Databázové relace budou ve vašem spouštěči zavěšovány, dokud nebudete na max_connections a najednou nemůžete dělat nic jiného než čekat nebo začít ručně rušit transakce.

Co bych doporučil, je mít spouštěč NOTIFY a LISTEN pomocný skript, který zůstává trvale spuštěný a připojený k DB (ale ne v transakci).

Jediné, co váš spouštěč musí udělat, je INSERT řádek do tabulky fronty a odeslat NOTIFY . Váš skript obdrží NOTIFY zprávu, protože se zaregistroval k LISTEN pro to prozkoumá tabulku fronty a udělá zbytek.

Pomocný program můžete napsat v jakémkoli jazyce, který vám vyhovuje; Obvykle používám Python s psycopg2 .

Tento skript může odeslat e-mail na základě informací, které najde v databázi. Nemusíte dělat všechno to ošklivé formátování textu v PL/PgSQL, místo toho můžete věci nahradit šablonou ve výkonnějším skriptovacím jazyce a jednoduše načíst data proměnných z databáze, když NOTIFY přichází.

S tímto přístupem může váš pomocník odeslat každou zprávu a teprve poté odstranit informace z tabulky fronty. Tímto způsobem, pokud se vyskytnou přechodné problémy s vaším poštovním systémem, které způsobí selhání odesílání, neztratili jste informace a můžete pokračovat v pokusu o jejich odeslání, dokud neuspějete.

Pokud to opravdu musíte udělat v databázi, podívejte se na PgMail.



  1. Jak změnit heslo uživatele PostgreSQL?

  2. Získejte hodnotu pole pomocí kurzoru

  3. Jsou postgresové indexy JSON dostatečně účinné ve srovnání s klasickými normalizovanými tabulkami?

  4. MySQL Change Collation of All Tables