Os IDs de transações virtuais têm o formato "n/nnnn". XIDs reais são apenas inteiros. A primeira parte do xid virtual é um identificador de back-end exclusivo para cada conexão; a segunda parte é um ID de transação temporário atribuído pelo backend dessa conexão para suas transações.
Veja a definição de
VirtualTransactionId
em src/include/storage/lock.h
para detalhes. Essas colunas parecem corresponder ao
virtualxid
e/ou transactionid
e virtualtransaction
colunas em pg_locks
. Consulte os documentos
. Se eu estiver correto nisso, então:
- "TX" é o ID da transação virtual da transação que retém ou aguarda o bloqueio.
- "XID" é o ID da transação virtual da transação de destino da transação em espera, se o destino for um xid virtual. No PgAdmin, ele também pode mostrar o xid do alvo se for um xid normal.
IDs de transações virtuais são IDs de transações temporárias e transitórias que o PostgreSQL aloca para cada transação no início da transação. Eles não são gravados em disco. Um xid real só é alocado quando a transação faz algo que requer uma gravação transacional em disco.
De acordo com o manual vinculado: