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

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 8.1 已结束支持。 请参阅 当前版本手册.

SET TRANSACTION

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

大纲

SET TRANSACTION transaction_mode [, ...]
SET SESSION CHARACTERISTICS AS TRANSACTION transaction_mode [, ...]

where transaction_mode is one of:

    ISOLATION LEVEL { SERIALIZABLE | REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED }
    READ WRITE | READ ONLY

描述

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

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

事务的隔离级别决定当其他事务并发运行时该事务能看到什么数据:

READ COMMITTED

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

SERIALIZABLE

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

SQL 标准还定义了另外两个级别:READ UNCOMMITTED和REPEATABLE READ。在PostgreSQL中,READ UNCOMMITTED被当作READ COMMITTED对待,而REPEATABLE READ被当作SERIALIZABLE对待。

在事务执行第一条查询或数据修改语句(SELECT,INSERT,DELETE,UPDATE,FETCH,或 COPY)之后,事务隔离级别就不能再更改。有关事务隔离和并发控制的更多信息,请参见第 12 章。

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

注解

如果执行SET TRANSACTION之前没有 START TRANSACTION或者 BEGIN,它会发出一条警告,除此之外没有任何效果。

也可以不使用 SET TRANSACTION,而是在 BEGIN 或 START TRANSACTION 中直接指定所需的 transaction_modes。

会话默认的事务模式也可以通过设置配置参数default_transaction_isolation和default_transaction_read_only来设置。(事实上,SET SESSION CHARACTERISTICS只是用SET设置这些变量的一种冗长的等价形式。)这意味着这些默认值可以在配置文件中设置,也可以通过ALTER DATABASE等方式设置。更多信息请参考第 17 章。

兼容性

两个命令都在SQL标准中定义。标准中默认的事务隔离级别是SERIALIZABLE。在PostgreSQL中默认通常是READ COMMITTED,但你可以像上面提到的那样更改它。由于缺少谓词锁,SERIALIZABLE级别并不是真正可串行化的。详见第 12 章。

在 SQL 标准中,还可以用这些命令设置另一项事务特性:诊断区域的大小。这个概念特定于嵌入式 SQL,因此没有在 PostgreSQL服务器中实现。

SQL 标准要求在连续的transaction_modes之间有逗号,但出于历史原因,PostgreSQL允许省略逗号。

报告文档问题

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