PostgreSQL запускает событие при обновлении таблицы

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

  • Генерация события (вызов API) при обновлении таблицы

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
437
1

Ответы 1

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

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

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

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

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

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

Благодарю за ваш ответ. Я попробую найти существующее решение

elition 18.03.2019 13:10

PGQ известен, но у меня нет личного опыта с ним.

Laurenz Albe 18.03.2019 13:18

Другие вопросы по теме