How to find out PIDs of transactions older than the current? - Mailing list pgsql-general

From Torsten Förtsch
Subject How to find out PIDs of transactions older than the current?
Date
Msg-id 535A465B.5050805@gmx.net
Whole thread Raw
Responses Re: How to find out PIDs of transactions older than the current?  (Torsten Förtsch <torsten.foertsch@gmx.net>)
List pgsql-general
Hi,

I think I can find out the transaction ids of concurrent transactions
older than the current one by:

  select * from txid_snapshot_xip(txid_current_snapshot())
  union
  select * from txid_snapshot_xmax(txid_current_snapshot());

Now, I want to map these transaction ids to backend process ids.
pg_stat_activity does not provide the transaction id. So, I turned to
pg_locks.

select l.pid
  from (
      select * from txid_snapshot_xip(txid_current_snapshot())
      union
      select * from txid_snapshot_xmax(txid_current_snapshot())) tx(id)
  join pg_locks l
    on (    l.locktype='transactionid'
        and l.transactionid::TEXT::BIGINT=tx.id);

This works. But my transaction ids are still far less than 2^32.

Will it also work after the wraparound? I am worried because there is no
default cast from XID to INT or BIGINT.

Is there a better way?

Thanks,
Torsten


pgsql-general by date:

Previous
From: matthias.trauffer@bd.zh.ch
Date:
Subject: unexpected data offset flag 0
Next
From: Oleg Bartunov
Date:
Subject: New GIN opclass for hstore (Faster and smaller) !