PostgreSQL вызывает событие при обновлении таблицы - PullRequest
0 голосов
/ 18 марта 2019

Я новичок в PostgreSQL, и мне хотелось бы узнать или узнать о некоторых новых возможностях:

  • Событие Emit (вызов API) при обновлении таблицы

Моя проблема: у меня есть SSO, который вставляет строку в таблицу событий, когда пользователь что-то делает (логин, регистрация, информация об обновлении).Мне нужно использовать эти вставки в другом решении (программе лояльности) в режиме реального времени.

Сейчас я имею в виду запрашивать таблицу каждую минуту (в nodeJS) и сравнивать размер таблицы с размеромпредыдущая минутаЯ думаю, что это не хороший путь:)

1 Ответ

1 голос
/ 18 марта 2019

Вы можете сделать это с помощью триггера в принципе. Если API является внешним по отношению к базе данных, вам понадобится триггерная функция, написанная на C или языке, таком как PL / Perl или PL / Python, который может выполнять необходимое действие.

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

  • Блокировки удерживаются в течение длительного времени, что вредит параллелизму и, следовательно, производительности, а также повышает риск возникновения тупиковых ситуаций.

  • Autovacuum не может удалить мертвые строки, которые все еще были активны при запуске транзакции, что может привести к чрезмерному раздутию таблицы в занятых таблицах.

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

Реализация очереди в базе данных общеизвестно сложна, поэтому вы можете захотеть поискать существующие решения.

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