历史版本。 PostgreSQL 7.0 已结束支持。 请参阅 当前版本手册.
13.7. 应用级别的数据一致性检查
由于 Postgres
中的读操作不加锁(无论事务隔离级别如何),一个事务读取的数据仍可能被另一个事务覆盖。换句话说,某行被
SELECT 返回,并不意味着该行在返回的那一刻(即语句或事务开始之后的某个时刻)确实存在,也不意味着该行在当前事务提交或回滚之前受到保护、不会被并发事务删除或更新。
要确保某一行确实存在,并保护它不受并发更新影响,就必须使用
SELECT FOR UPDATE 或适当的
LOCK TABLE 语句。把使用可串行化模式的应用从其他环境移植到
Postgres 时,应当考虑这一点。
注意
在 6.5 版之前,Postgres 使用的是读锁,因此从较早的 Postgres 版本升级到 6.5(或更高)时,上述考虑同样适用。