可以使用 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.82 中的函数返回 xid8
值。Xid 用作 PostgreSQL MVCC 并发机制和流复制的基础。
当具有(非虚拟)xid 的顶层事务提交时,它会在 pg_xact
目录中标记为已提交。如果启用了 track_commit_timestamp,则会在 pg_commit_ts
目录中记录其他信息。
除了 vxid
和 xid
之外,准备好的事务还被分配了全局事务标识符 (GID)。 GID 是长度最多为 200 字节的字符串文字,在其他当前准备好的事务中必须是唯一的。GID 到 xid 的映射显示在 pg_prepared_xacts
中。
如果您发现文档中的任何内容不正确、与您使用特定功能的体验不符或需要进一步说明,请使用此表单报告文档问题。