pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
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(如果它们要执行的命令 在上述之列)。这是高层的只读概念,并不阻止写磁盘。
这两条命令都在 SQL 标准中定义。 标准中默认的事务隔离级别是 SERIALIZABLE;在 PostgreSQL 中默认 通常是 READ COMMITTED,但你可以按上文 所述更改它。PostgreSQL 不提供 隔离级别 READ UNCOMMITTED 和 REPEATABLE READ。由于多版本 并发控制,SERIALIZABLE 级别 并非真正的可串行化。细节见 第 12 章。
在 SQL 标准中,还有一项可以用这些命令设置的 事务特性:诊断区域的大小。这个概念只在嵌入式 SQL 中使用。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。