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.