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





Вы можете сделать это с помощью триггера в принципе. Если API является внешним по отношению к базе данных, вам понадобится триггерная функция, написанная на C или на таком языке, как PL/Perl или PL/Python, который может выполнять нужное вам действие.
Однако, если нельзя гарантировать, что это действие будет быстрым, запускать его в триггере может быть не очень хорошей идеей. Триггер выполняется в той же транзакции, что и оператор триггера, поэтому, если ваш триггер выполняется в течение длительного времени, вы получите длинную транзакцию базы данных. Это имеет два основных недостатка:
Блокировки удерживаются в течение длительного времени, что вредит параллелизму и, следовательно, производительности, а также увеличивает риск взаимоблокировок.
Autovacuum не может удалить мертвые строки, которые были активны на момент запуска транзакции, что может привести к чрезмерному раздуванию занятых таблиц.
Чтобы избежать этого риска, часто лучше использовать систему очередей: триггер создает запись в очереди, что является быстрым действием, а рабочие процессы асинхронно читают и обрабатывают эти записи очереди вне базы данных.
Реализация очереди в базе данных, как известно, сложна, поэтому вы можете поискать существующие решения.
PGQ известен, но у меня нет личного опыта с ним.
Благодарю за ваш ответ. Я попробую найти существующее решение