答案 0 :(得分:2)
虚拟交易ID具有" n / nnnn"格式。真正的XID只是整数。虚拟xid的第一部分是每个连接唯一的后端标识符;第二部分是该连接的后端为其交易分配的临时交易ID。
有关详细信息,请参阅VirtualTransactionId
中src/include/storage/lock.h
的定义。
这些列似乎与virtualxid
中的transactionid
和/或virtualtransaction
和pg_locks
列相对应。请参阅the docs。
如果我在那,那么:
虚拟事务ID是PostgreSQL在事务开始时分配给每个事务的临时临时事务ID。它们没有记录在磁盘上。只有当事务执行需要事务写入磁盘的操作时才会分配真正的xid。
根据链接手册:
每个事务在其整个持续时间内对其虚拟事务ID保持独占锁定。如果为事务分配了永久ID(通常仅在事务更改了数据库的状态时才会发生),它还会对其永久事务ID进行独占锁定,直到它结束。当一个事务发现有必要专门等待另一个事务时,它会通过尝试获取另一个事务ID(虚拟或永久ID,具体取决于具体情况)来实现共享锁定。只有当另一个事务终止并释放其锁时,这才会成功。