↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

已结束支持的版本: 7.2 / 7.1
历史版本。 PostgreSQL 7.1 已结束支持。 请参阅 当前版本手册.

9.3. 读已提交隔离级别 #

读已提交是 Postgres 中的默认隔离级别。当事务使用这一隔离级别时,SELECT 查询只能看到查询开始之前已经提交的数据,既看不到未提交的数据,也看不到查询执行期间并发事务提交的更改。(不过,SELECT 能看到同一事务中先前执行的更新效果,即使这些更新尚未提交。)注意,如果其他事务在第一个 SELECT 执行期间提交了更改,即使两个连续的 SELECT 命令位于同一个事务中,它们也可能看到不同的数据。

如果查询在执行 UPDATE 语句(或 DELETE 或 SELECT FOR UPDATE)时找到的目标行,已经被一个并发未提交事务更新,那么试图更新该行的第二个事务会等待另一个事务提交或回滚。若对方回滚,等待的事务可以继续更改该行。若对方提交(且该行仍然存在,即没有被另一个事务删除),查询会针对该行重新执行,以检查新行版本是否仍然满足查询的搜索条件。如果新行版本满足查询搜索条件,该行将被更新(或删除或标记为更新)。注意,更新的起点将是新行版本;而且,更新之后这个被更新过两次的行对当前事务中后续的 SELECT 可见。因此,当前事务能够看到另一个事务对这一特定行的效果。

读已提交级别所提供的部分事务隔离对许多应用来说已经足够,而且这一级别快速又易于使用。不过,对于执行复杂查询和更新的应用,可能需要保证比读已提交级别更严格一致的数据库视图。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.