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

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

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1
历史版本。 PostgreSQL 7.4 已结束支持。 请参阅 当前版本手册.

SET TRANSACTION

SET TRANSACTION — 设置当前事务的特性

大纲

SET TRANSACTION
    [ ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } ] [ READ WRITE | READ ONLY ]
SET SESSION CHARACTERISTICS AS TRANSACTION
    [ ISOLATION LEVEL { READ COMMITTED | SERIALIZABLE } ] [ READ WRITE | READ ONLY ]

描述

SET TRANSACTION 命令设置当前事务的事务特性。它对任何后续事务都没有影响。SET SESSION CHARACTERISTICS 设置一个会话中每个事务的默认事务特性。对于单个事务,SET TRANSACTION 可以覆盖它。

可用的事务特性是事务隔离级别和事务访问模式(读/写或只读)。

事务的隔离级别决定该事务在其他事务并发运行时能看到哪些数据。

READ COMMITTED

一条语句只能看到在它开始之前已提交的行。这是默认值。

SERIALIZABLE

当前事务只能看到在本事务中第一条查询或数据修改语句执行之前已提交的行。

提示

直观地说,可串行化意味着两个并发事务给数据库留下的状态,与这两个事务严格地一个接一个按任一顺序执行后的状态相同。

The transaction isolation level cannot be set after the first query or data-modification statement (SELECT, INSERT, DELETE, UPDATE, FETCH, COPY) of a transaction has been executed. See 第 12 章 for more information about transaction isolation and concurrency control.

事务访问模式决定事务是读/写还是只读。默认为读/写。当事务为只读时,下列 SQL 命令被禁止:INSERT、UPDATE、DELETE 和 COPY FROM(如果它们要写入的表不是临时表);所有 CREATE、ALTER 和 DROP 命令;COMMENT、GRANT、REVOKE、TRUNCATE;以及 EXPLAIN ANALYZE 和 EXECUTE(如果它们要执行的命令在上述之列)。这是高层的只读概念,并不阻止写磁盘。

注解

会话默认的事务隔离级别也可以用命令

SET default_transaction_isolation = 'value'

以及在配置文件中设置。更多信息请参考第 16.4 节。

兼容性

这两条命令都在 SQL 标准中定义。标准中默认的事务隔离级别是 SERIALIZABLE;在 PostgreSQL 中默认通常是 READ COMMITTED,但你可以按上文所述更改它。PostgreSQL 不提供隔离级别 READ UNCOMMITTED 和 REPEATABLE READ。由于多版本并发控制,SERIALIZABLE 级别并非真正的可串行化。细节见第 12 章。

在 SQL 标准中,还有一项可以用这些命令设置的事务特性:诊断区域的大小。这个概念只在嵌入式 SQL 中使用。

报告文档问题

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