определенное время, например через несколько секунд, после наступления события?
Нет.
А если триггер вызывает функцию, в которой sleep?
То это задержка внутри функции (и в той же транзакции, кстати), а триггер срабатывает как обычно.
А если ожидается порядка 500тпс и на каждый будет срабатывать такой триггер с функцией-задержкой, то бд не взорвется?
Нет, не взорвётся. Просто встанет колом на блокировках.
Вот просто любопытно, зачем? Бизнес-цель какая?
В сервис летят данные от разных источников и надо всех дождаться.
Я думаю, это на уровне приложения надо разруливать
Да не получается, каждый запрос с таймаутом это новый поток, а на 500тпс их плодить не получится.
А что у вас за задача?
Например, можно сделать в главной таблице поле "обработано", и джоб, который будет обрабатывать все "необработанные" записи, добавленные больше секунды назад
В сервис летит три потока данных. По одному из потоков тригерить обработку: 1. Если пришли данные от всех источников, то собрать и пустить дальше. 2. Если не пришли, то подождать таймаут и проверить еще раз.
Создайте структуру с 3мя полями и ждите её заполнения. Когда заполнена - пускайте дальше
С этим понятно, не понятно, что делать с таймаутами. На ум приходит только полить базу и искать там просроченные и незаполненные данные.
А данные к вам как приходят? http-запросы?
Было бы очень хорошо, если бы вы договорились с приложением, чтобы редактирование "главной" таблицы было строго последним действием. И тогда бы вы в триггере на эту таблицу всё обработали немедленно (кидая исключение, если не все ожидаемые изменения в других таблицах нашлись). Сделать действие с задержкой — это мимо парадигмы, потому что всегда должен быть кто-то (транзакция), кто действие сделал. Можно завести какую-то внешнюю очередь, поддерживающую отложенные сообщения; в триггере класть в эту очередь (через FDW?), а потом очередь выполнит свою транзакцию обратно в PG Есть ли такая внутренняя очередь в PG? Например: https://www.pgcon.org/2008/schedule/attachments/55_pgq.pdf
Спасибо за развернутый ответ.
Обсуждают сегодня