PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как мога да изпратя имейл от тригера на PostgreSQL?

Вижте отличната статия на depesz и pg-message-queue.

Изпращането на имейл директно от базата данни може да не е добра идея. Ами ако DNS разделителната способност е бавна и всичко виси за 30 секунди, след което изтече? Ами ако вашият пощенски сървър се колебае и отнема 5 минути за приемане на съобщения? Ще получавате закачени сесии на база данни в тригера, докато не сте в max_connections и изведнъж не можете да направите нищо, освен да изчакате или да започнете ръчно да анулирате транзакции.

Това, което бих препоръчал, е вашият тригер NOTIFY a LISTEN въвеждане на помощен скрипт, който остава постоянно работещ и свързан с DB (но не в транзакция).

Всичко, което вашият тригер трябва да направи, е INSERT ред в таблица на опашката и изпратете NOTIFY . Вашият скрипт получава NOTIFY съобщение, защото се е регистрирало в LISTEN за него, проучва таблицата на опашката и прави останалото.

Можете да напишете помощната програма на всеки език, който ви е удобен; Обикновено използвам Python с psycopg2 .

Този скрипт може да изпрати имейла въз основа на информацията, която намира в базата данни. Не е нужно да правите цялото грозно форматиране на текст в PL/PgSQL, вместо това можете да замените нещата в шаблон на по-мощен скриптов език и просто да извлечете променливите данни от базата данни, когато NOTIFY влиза.

С този подход вашият помощник може да изпрати всяко съобщение и едва след това да премахне информацията от таблицата на опашката. По този начин, ако има преходни проблеми с вашата пощенска система, които причиняват неуспешно изпращане, не сте загубили информацията и можете да продължите да се опитвате да я изпратите, докато не успеете.

Ако наистина трябва да направите това в базата данни, вижте 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. PostgreSQL отмяна на разрешения от pg_catalog таблици

  2. Как да нулирате последователността в postgres и да попълните колоната за идентификатор с нови данни?

  3. как мога да създам нов XML файл от съществуваща база данни в PostgreSQL база данни с помощта на java

  4. Първи стъпки с Postgres 13 на Ubuntu 20.04

  5. Как да махна PostgreSQL база данни, ако има активни връзки към нея?