【发布时间】:2019-12-20 11:07:55
【问题描述】:
我知道如果我使用 ctid,我应该在子查询中使用 FOR UPDATE,因为当我的事务尝试删除它时,另一个事务可以更新行。因此,该行不会被删除。正确的方法:
DELETE FROM table WHERE ctid = any(array(
SELECT ctid
FROM table
WHERE ...
LIMIT 100
FOR UPDATE));
如果我以同样的方式使用主键,我是否需要在 SELECT 子查询中使用 FOR UPDATE?如果没有,为什么不呢?
DELETE FROM table WHERE id = any(array(
SELECT id
FROM table
WHERE ...
LIMIT 100
FOR UPDATE));
【问题讨论】:
标签: postgresql