Transaction IDs
Use PgTransactionId for PostgreSQL xid. A C# uint maps to PostgreSQL
oid, so the two types are not interchangeable.
[PgFunction]public static PgTransactionId Echo(PgTransactionId value) => value;Value contains the raw 32-bit ID. Invalid, Bootstrap, Frozen, and
FirstNormal expose PostgreSQL’s special values. Returning Invalid produces
SQL NULL, matching pgrx.
PgTransactionId also works in SPI parameters, rows, vectors, and PgArray<T>.
Call ToFullTransactionId() inside an extension callback to add the current
PostgreSQL epoch:
ulong fullId = transactionId.ToFullTransactionId();The method reads the server’s next full transaction ID and handles 32-bit wrap. It requires the active PostgreSQL backend thread.
Subtransaction callbacks receive PgSubtransactionId for the current and parent
IDs. Use its Value property when raw numeric access is needed.
The subtransaction information sample
reports a transaction ID’s status, parents and nesting level from PostgreSQL’s
pg_subtrans data.