比如说,我有一个嵌套的select:
WITH candidate AS (
select * table_a where flag = 'a'
)
select * from candidate where other_flag = 'b' for share
这个SQL间接地从table_a
到for share
的select
。在这种情况下,会对从table_a
返回的行获取行锁吗?
该查询不应该获取任何行锁,因为candidate
不是基表。但是你可以看到你自己:run
EXPLAIN WITH (...) SELECT ...
,查看执行计划中是否存在LockRows
节点。
如果你想锁定这些行,你必须在子查询中使用FOR SHARE
。