Я использую PostgreSQL с SKIP LOCKED
для реализации очереди, как описано в Для чего SKIP LOCKED в PostgreSQL 9.5? .В принципе, это работает нормально, но иногда, когда рабочие работают быстро и работы не так много, очередь запускается пустой.IOW: SELECT
ничего не находит, и поэтому оператор выполняется, ничего не делает в конце, и мы закончили.
Теперь я хотел бы снова выполнить оператор каккак только появится новый ряд, попробуйте еще раз (хотя все остальные работники могут попытаться сделать это тоже).В конце концов, это сводится к опросу базы данных, что, скажем, не оптимально.
Конечно, я мог бы использовать функцию NOTIFY
PostgreSQL, чтобы информировать работников, когда новая строка написана, но яИнтересно, возможно ли это в самом SELECT
, например, оставить его открытым, пока он не преуспеет и не вернет запись?Нечто такое, как длительный SELECT
, который остается открытым столько времени, сколько требуется для возврата результата.
Возможно ли это?