Nodejs Posgresql, как следить за новой вставкой записи базы данных - PullRequest
0 голосов
/ 16 апреля 2019

Можно ли как-то просмотреть мою базу данных Postgresql из моего сервиса Nodejs Express и запустить функцию, когда в базу данных была вставлена ​​новая запись?

НЕ: получение вызова вставки и запуск функции.Функция должна запускаться, даже если кто-то вставляет запись через что-то вроде pgAdmin.

NOT: добавление триггера в базу данных.Мне нужно отправлять электронные письма и так далее, поэтому желательно, чтобы я хотел найти решение в моей службе Nodejs Express, но я все равно буду прислушиваться к идеям триггера базы данных.

Ответы [ 2 ]

0 голосов
/ 16 апреля 2019

Это довольно сложный вопрос. В идеале у вас есть 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, которая использует довольно минимальную логику триггера для уведомления прослушивающих приложений об изменениях.

Преимущество этих опций состоит в том, что они (почти) мгновенно уведомляют о внесении изменений в базу данных, а потоки событий аккуратно отключают «слушателя» от базы данных. Тем не менее, вам придется уделять пристальное внимание аспектам производительности, и вам может потребоваться отключить отправку электронной почты, например, при выполнении массовых операций с данными.

0 голосов
/ 16 апреля 2019

PostgreSQL предоставляет для этого команды NOTIFY [1] и LISTEN [2].В целом, идея состоит в том, чтобы ваша служба NodeJS прослушивала для уведомлений от PostgreSQL.

Нашли это для вас: https://github.com/andywer/pg-listen - это может дать вамидея о том, как это сделать на практике.

[1] https://www.postgresql.org/docs/current/sql-notify.html

[2] https://www.postgresql.org/docs/current/sql-listen.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...