You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中SELECT ... FOR UPDATE是否阻塞同条件新插入行?

PostgreSQL SELECT ... FOR UPDATE 对新插入行的阻塞问题

首先要纠正一点:你给出的示例SELECT语句没有加上FOR UPDATE子句,实际要对查询到的行加排他锁,需要写成:

SELECT * FROM my_table WHERE parent_id = 5 FOR UPDATE;
UPDATE my_table SET created = null WHERE parent_id = 5;

针对你的问题:

  • SELECT ... FOR UPDATE只会锁定执行查询时已经存在的、满足parent_id=5条件的行,这些被锁定的行会阻塞其他事务对它们的更新、删除操作。
  • 对于之后插入的parent_id=5的新行,这个锁不会产生任何阻塞效果,新行可以正常插入。

如果需要阻止事务期间插入parent_id=5的新行,仅靠行级锁做不到,你需要额外添加表级锁(比如LOCK TABLE my_table IN EXCLUSIVE MODE;)或者通过其他业务逻辑限制。

内容的提问来源于stack exchange,提问作者user2880391

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 21:21:59