2025年9月25日: PostgreSQL 18 发布!
支持的版本:当前 (18) / 17 / 16
开发版本:devel

67.1. 事务和标识符 #

可以使用 BEGINSTART TRANSACTION 显式创建事务,并使用 COMMITROLLBACK 结束事务。显式事务外的 SQL 语句会自动使用单语句事务。

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

非虚拟 TransactionId(或 xid),例如 278394,是从 PostgreSQL 集群内所有数据库使用的全局计数器中按顺序分配给事务的。当事务首次写入数据库时,就会发生此分配。这意味着编号较低的 xid 在编号较高的 xid 之前开始写入。请注意,事务执行首次数据库写入的顺序可能与事务开始的顺序不同,特别是当事务以仅执行数据库读取的语句开始时。

内部事务 ID 类型 xid 是 32 位宽,并且每 40 亿个事务会回绕。在每次回绕期间,会递增一个 32 位的 epoch。还有一个 64 位类型 xid8,它包含这个 epoch,因此在安装的生命周期内不会回绕;可以通过强制转换转换为 xid。 表 9.84 中的函数返回 xid8 值。Xid 用作 PostgreSQLMVCC 并发机制和流复制的基础。

当具有(非虚拟)xid 的顶级事务提交时,它会在 pg_xact 目录中被标记为已提交。如果启用了 track_commit_timestamp,则会在 pg_commit_ts 目录中记录其他信息。

除了 vxidxid 之外,预备事务还被分配全局事务标识符(GID)。 GID 是长度最多为 200 字节的字符串文字,在其他当前预备事务中必须是唯一的。GID 到 xid 的映射显示在 pg_prepared_xacts 中。

提交更正

如果您在文档中看到任何不正确、与您对特定功能的体验不符或需要进一步澄清的内容,请使用此表格报告文档问题。