Это довольно сложный вопрос. В идеале у вас есть API для конечных пользователей, чтобы изменить состояние вашей системы, и вы можете перехватывать события в этом API, вместо того, чтобы иметь решение на уровне базы данных. Это дает вам лучшую абстракцию и наименьшее количество побочных эффектов - «отправка электронного письма» является побочным эффектом «вставки в значения заказов (???)».
Однако ваш вопрос понятен - вы хотите отслеживать вставки.
У вас есть два варианта: тянуть против толчка.
Версия по запросу означает, что вы запускаете запланированное задание , которое выполняется с любой частотой, необходимой вашему приложению, и находит изменения, которые вас интересуют. Для этого, вероятно, потребуется таблица журнала в вашей базе данных, что позволит вам отслеживать измененные данные. Например, если вы отслеживаете «заказы», у вас может быть таблица с именем «processing_orders» с order_id, status, processed_date
, и вы выполняете запрос в соответствии с select * from orders where order_id not in (select order_id from processed_orders
, а затем делаете все, что вам нужно; как только это будет завершено, поместите строку в processing_orders.
У этого есть несколько преимуществ: это можно проверить, «побочный эффект» отправки электронной почты можно отключить, что удобно при выполнении массовых вставок (например, после восстановления резервной копии), у вас есть контрольный журнал, и вы можете контролировать влияние на производительность. Недостатками являются задержка между работой базы данных и отправкой электронной почты. Вы можете заметить снижение производительности, если у вас много запланированных заданий, выполняющих аналогичные задачи.
Опция push, которую я знаю, использует триггеры базы данных. Вы можете написать собственный триггер в JavaScript , если действительно хотите, хотя я бы рекомендовал не отправлять электронную почту в контексте триггера - влияние на производительность, вероятно, будет ужасным.
Вы можете использовать инфраструктуру потоковой передачи событий , которая уведомляет вас об изменениях на основе параметров конфигурации. Google твой друг.
Наконец, вы можете использовать функцию pg_notify в Postgres, которая использует довольно минимальную логику триггера для уведомления прослушивающих приложений об изменениях.
Преимущество этих опций состоит в том, что они (почти) мгновенно уведомляют о внесении изменений в базу данных, а потоки событий аккуратно отключают «слушателя» от базы данных. Тем не менее, вам придется уделять пристальное внимание аспектам производительности, и вам может потребоваться отключить отправку электронной почты, например, при выполнении массовых операций с данными.