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

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

受支持版本: 当前版本 (18) / 17 / 16
测试与开发版本: 19 / devel
测试版PostgreSQL 19 RC 1 尚未正式发布,内容与行为在正式发布前可能变化。正式内容请看当前版本。

67.1. 事务与标识符 #

事务可以使用 BEGIN 或 START TRANSACTION 显式创建,并使用 COMMIT 或 ROLLBACK 结束。显式事务之外的 SQL 语句会自动使用单语句事务。

每个事务都由唯一的 VirtualTransactionId 标识(也称为 virtualXID 或 vxid),它由后端的进程号(即 procNumber)和每个后端本地按顺序分配的编号组成,后者称为 localXID。例如,虚拟事务 ID 4/12532 的 procNumber 为 4,localXID 为 12532。

非虚拟的 TransactionId(或 xid),例如 278394,由 PostgreSQL 集簇内所有数据库共用的全局计数器按顺序分配给事务。这种分配发生在事务首次向数据库写入时。这意味着编号较小的 xid 比编号较大的 xid 更早开始写入。需要注意的是,事务首次执行数据库写入的顺序可能与事务开始的顺序不同,尤其是在事务开始时的语句只执行数据库读取的情况下。

内部事务 ID 类型 xid 宽 32 位,每 40 亿个事务就会回卷一次。每次回卷时都会递增一个 32 位纪元。另外还有一个 64 位类型 xid8,它包含这个纪元,因此在一次安装的生命周期内不会回卷;必要时可以通过强制类型转换将其转换为 xid。表 9.85 中的函数返回 xid8 值。xid 是 PostgreSQLMVCC 并发机制和流复制的基础。

当带有(非虚拟)xid 的顶层事务提交时,它会在 pg_xact 目录中被标记为已提交。如果启用了 track_commit_timestamp,还会在 pg_commit_ts 目录中记录附加信息。

除了 vxid 和 xid 之外,预备事务还会被赋予全局事务标识符(GID)。GID 是长度最多 200 字节的字符串字面量,并且必须在当前其他处于预备状态的事务中保持唯一。GID 到 xid 的映射可在 pg_prepared_xacts 中查看。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游会在正式发布前持续修订。