↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 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 已于 2010 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

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 中使用。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。