I need my program code to ensure that certain part of logic is being executed within a transaction.
What query would tell me the current transaction ID / other information that would allow me to determine if I am in a transaction from within the transaction?
BEGIN;
-- How to check if I am in a transaction?
COMMIT;
Best Answer
A simple way is to compare
now()
tostatement_timestamp()
.now()
gives the current date and time (start of current transaction).statement_timestamp()
gives the current date and time (start of current statement).Example:
The other alternative is to execute two queries:
and compare the resulting xid. If it is the same, then you are in a transaction.
The downside to the latter approach is that every
txid_current()
increments xid value and will further advance you to a wraparound.