我在 PostgreSQL 中有一个表,我想将其视为一个队列。我有一些选择标准,用于锁定然后从表中删除行,如下所示:
DELETE FROM queue
WHERE itemid = (
SELECT itemid
FROM queue
ORDER BY itemid
WHERE some_column='some value'
FOR UPDATE SKIP LOCKED
)
RETURNING *;
行锁定在 PostgreSQL 中是如何工作的?执行查询时,SELECT它会自动锁定所有匹配的行吗?我问这个是因为分组对我很重要,我想处理some_column='some value'同一个工作人员中的所有行。
澄清:some value我真正想知道的是,是否会发生两个工作人员为相同的参数(. 这是我想避免的。我期望发生的是,其中一名工人将获得所有行(如果行锁定是原子的),而另一名工人一无所获。是这样吗?