我正在尝试为作业队列进行某种更新选择。我需要它来支持影响同一个表或数据库的并发进程该服务器将仅用于队列,因此每个队列的数据库是可以接受的。最初我在考虑类似以下的事情:
UPDATE state=1,ts=NOW() FROM queue WHERE ID IN (SELECT ID FROM queue WHERE state=0 LIMIT X) RETURN *
我读到这将导致竞争条件,我读到 SELECT 子查询有一个选项可以使用 FOR UPDATE,但是这将锁定行并且并发调用将被阻止,我不介意他们跳过到下一个未锁定的行。
所以我要求的是在 postgres 中拥有一个需要最少锁定整个数据库的 fifo 系统的最佳方式。