1. Top-level transactions
顶级事务(Top-level transactions)通过由 PGPROC 字段 backendId 和 lxid 组成的 VirtualTransactionIDs 来标识。对于已准备的事务,LocalTransactionId 是一个普通的 XID。这些在短期内保证唯一,但在数据库重启或 XID 滚转后会被重新使用;因此,它们永远不应被存储在磁盘上。
请注意,不能假定结构体 VirtualTransactionId 可以作为一个整体进行原子赋值。然而,类型
LocalTransactionId 被假定为可以进行原子赋值,并且 backend ID 不会频繁更改,因此我们可以分别获取或赋值这两个字段。我们有意避免在 PGPROC 中使用该结构体,以防止因尝试对其使用结构体赋值而导致编码错误;相反,请使用 GET_VXID_FROM_PGPROC()
函数。
1.1 PGPROC 中 backendId 、lxid
Postgres内核 lock.h 头文件定义了 VirtualTransactionId 结构类型,原型如下: