可以使用BEGIN或START TRANSACTION
显式创建事务,并使用COMMIT或ROLLBACK
结束事务。显式事务之外的SQL语句会自动使用单语句事务。
每个事务都由一个唯一的VirtualTransactionId
(也称为virtualXID或vxid)标识,
它由一个后端ID(或backendID)和一个分配给每个后端的
本地顺序号组成,称为localXID。例如,虚拟事务ID
4/12532的backendID为
4,localXID为
12532。
非虚拟TransactionId(或xid),例如
278394,是从一个全局计数器中按顺序分配给事务的,
该计数器由PostgreSQL集群中的所有数据库共用。
这种分配发生在事务首次写入数据库时。这意味着编号较低的xid在编号较高
的xid之前开始写入。请注意,事务首次写入数据库的顺序可能与事务开始的
顺序不同,特别是当事务以仅执行数据库读取的语句开始时。
内部事务ID类型xid是32位宽,并且每
40亿次事务后回绕。
在每次回绕期间,一个32位的纪元会递增。还有一种64位类型
xid8,它包含了这个纪元,因此在安装的生命周期内
不会回绕;它可以通过类型转换转换为xid。
表 9.80中的函数
返回xid8值。Xid被用作
PostgreSQL的
MVCC并发机制和流复制的基础。
当一个顶层事务带有(非虚拟的)xid提交时,
它会在pg_xact目录中标记为已提交。
如果启用了track_commit_timestamp,
额外的信息会记录在pg_commit_ts目录中。
除了vxid和xid之外,
预备事务还被分配了全局事务标识符
(GID)。GID 是长度最多为 200 字节的字符串字面值,
必须在当前预备事务中唯一。GID 到 xid 的映射显示在
pg_prepared_xacts中。