Adrian Klaver <adrian.klaver@xxxxxxxxxxx> writes: > As I understand it a trigger function runs in its own transaction so the > rules from below apply: > https://www.postgresql.org/docs/12/transaction-iso.html No, a trigger is part of the calling transaction. There's nothing special about it other than the condition causing the call; visibility rules are the same as for any other function. So the answer to the OP's question depends on the transaction's isolation level and (for typical PLs) on whether the function is VOLATILE or not. serializable -> the transaction's initial snapshot is used throughout non serializable, volatile function -> each statement in the function takes a fresh snapshot non serializable, non-volatile function -> the function uses a single snapshot. For a non-deferred trigger, I think it shares the snapshot used by the triggering query. Not sure about exactly when the snapshot is taken for a deferred trigger. regards, tom lane