Как подписаться на событие (trigger) устаревания даты и вызвать NOTIFY?
Всем привет!
Делаю транзакционную систему (платежи за магазин, услуги, переводы бонусов). Архитектура микросервисная, транзакции (платежи) распределенные. Под "транзакцией" я в этом контексте имею в виду не СУБД транзакции, а сами сделки/платежи. Фактический, конечный статус транзакции вообще в системах партнера, типа акваиринга поэтому чтобы узнать была ли транзакция успешной приходится полить системы партнера. Полить статус надо по определенному алгоритму, чем долльше транзакция в обработке тем реже ее полим. Например, первый запрос делать через 1 секунду, второй через 3, третий через 5, пятый через 15, шестой через минуту. Сейчас как раз занимаюсь поллером, задача для меня не новая, я уже делал это на прошлой работе, тогда я все сделал на уровне приложения. Грубо говоря моя прила запускалась по крону и селекотовала каждую секунду.
Сейчас мне такое решение не нравится и мне хочется вообще обойтись без селектов, хочу, чтобы БД сама сообщала о записях, по которым надо запросить статус. Что-то типа тригера на next_check_at <= NOW(), который будет вызывать NOTIFY, на который подписано мое приложение. Также хочу, чтобы по этому тригеру для каждой найденной записи инкрементировалось поле next_check_at, на след. временную метку в зависимости от текущей итерации опроса.
Гуглление привело меня к мысли, о том, что тригеров на наступление даты не бывает. Но я реально не хочу всю описанную логику реализовывать в приложении. Из более-менее интересных инструментов этой области я нагуглил pg_cron и pgpro_scheduler. Первый - непойми что за расширение и мне будет трудно протащить его у архитектора, второй же только для postgresPro.
Посоветуйте, пожалуйста, решение удовлетворяющее моим потребностям или какой-нибудь удачный компромис.
Спасибо.
UPD!
Сейчас подумал, что я могу написать функцию poll_outdated_records, которая будет селектовать по условию next_check_at <= NOW() и в случае нахождения таких записей будет делать UPDATE их поля next_check_at на следуюущую временную точку, а затем вызвать NOTIFY по этим записям. На уровне крона же я смогу просто конфигурировать как часто хочу вызывать функцию poll_outdated_records: раз в секунду, 5 секуд, минуту...
Только вот хотел бы уточнить у знатоков, насколько это нормальное решение? Насклько оптимальное?
Какие "раз в 10 минут"? Я выше сказал, что текущие бизнес-правила требуют селектовать раз в несколько секунд, в идеале раз в секунду! Но это лишком большая нагрузка. Также писал, что хочется вообще не селектовать :). Да и вообще почему "раз в 10 минут"? Просто число из пальца?