没有 WHERE 子句的 UPDATE 是否会锁定 PostgreSQL 中的表?

ori*_*nal 9 postgresql locking

整个表UPDATE(不指定WHERE子句)是否锁定了 PostgreSQL 中的一个表?例如,它会阻止行被删除/插入吗?

例如,如果我运行,我 UPDATE t1 SET key = 'value' 可以期望t1UPDATE执行过程中不会插入新行吗?

如果不是,我UPDATE是否可以期望即使在开始后出现的行也会更新?(键DEFAULT 'value'在其定义中没有)

a_h*_*ame 15

没有 WHERE 子句的 UPDATE 将锁定表中的所有行,但不会为 DML 锁定表本身。

无法从其他事务中删除这些行,因为它们已被锁定。

但是您可以毫无问题地插入新行(假设它们不违反任何约束)。

在 UPDATE之后插入的任何行都不会被 UPDATE 语句看到,因此它们不会被更改。