From dd1a3bccca241a998b4ebf39d67202698e5fa599 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Tue, 25 Feb 2014 12:34:04 -0500 Subject: Show xid and xmin in pg_stat_activity and pg_stat_replication. Christian Kruse, reviewed by Andres Freund and myself, with further minor adjustments by me. --- src/backend/storage/ipc/sinvaladt.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/backend/storage/ipc') diff --git a/src/backend/storage/ipc/sinvaladt.c b/src/backend/storage/ipc/sinvaladt.c index e7c3fb2f548..e6805d96b1c 100644 --- a/src/backend/storage/ipc/sinvaladt.c +++ b/src/backend/storage/ipc/sinvaladt.c @@ -25,6 +25,7 @@ #include "storage/shmem.h" #include "storage/sinvaladt.h" #include "storage/spin.h" +#include "access/transam.h" /* @@ -400,6 +401,37 @@ BackendIdGetProc(int backendID) return result; } +/* + * BackendIdGetTransactionIds + * Get the xid and xmin of the backend. The result may be out of date + * arbitrarily quickly, so the caller must be careful about how this + * information is used. + */ +void +BackendIdGetTransactionIds(int backendID, TransactionId *xid, TransactionId *xmin) +{ + ProcState *stateP; + SISeg *segP = shmInvalBuffer; + PGXACT *xact; + + *xid = InvalidTransactionId; + *xmin = InvalidTransactionId; + + /* Need to lock out additions/removals of backends */ + LWLockAcquire(SInvalWriteLock, LW_SHARED); + + if (backendID > 0 && backendID <= segP->lastBackend) + { + stateP = &segP->procState[backendID - 1]; + xact = &ProcGlobal->allPgXact[stateP->proc->pgprocno]; + + *xid = xact->xid; + *xmin = xact->xmin; + } + + LWLockRelease(SInvalWriteLock); +} + /* * SIInsertDataEntries * Add new invalidation message(s) to the buffer. -- cgit v1.2.3