gpt4 book ai didi

postgresql - PostgreSQL 中的行级锁定是原子的吗?

转载 作者:行者123 更新时间:2023-11-29 12:49:24 25 4
gpt4 key购买 nike

我在 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' 的所有行。

澄清:我真正想知道的是,两个工作人员是否会针对相同的参数(一些值)执行相同的查询(上面的查询) ) 并且其中一个锁定几行以进行更新,另一个工作人员拿起其余的行。这是我想避免的。我期望发生的是其中一名 worker 将获得所有行(如果行锁定是原子的)而另一名 worker 什么也得不到。是这样吗?

最佳答案

如果您的两个查询同时运行,则每个查询都可以返回并删除表中的一些行。从这个意义上说,您的查询不是原子的。

您应该在数据库外部或使用 PostgreSQL 序列化您的进程 advisory locks .

关于postgresql - PostgreSQL 中的行级锁定是原子的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57888313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com