diff options
Diffstat (limited to 'src/backend/commands/trigger.c')
-rw-r--r-- | src/backend/commands/trigger.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/backend/commands/trigger.c b/src/backend/commands/trigger.c index 4062306473..4018ae4b7f 100644 --- a/src/backend/commands/trigger.c +++ b/src/backend/commands/trigger.c @@ -2976,6 +2976,7 @@ void AfterTriggerFireDeferred(void) { AfterTriggerEventList *events; + bool snap_pushed = false; /* Must be inside a transaction */ Assert(afterTriggers != NULL); @@ -2990,7 +2991,10 @@ AfterTriggerFireDeferred(void) */ events = &afterTriggers->events; if (events->head != NULL) - ActiveSnapshot = CopySnapshot(GetTransactionSnapshot()); + { + PushActiveSnapshot(GetTransactionSnapshot()); + snap_pushed = true; + } /* * Run all the remaining triggers. Loop until they are all gone, in case @@ -3003,6 +3007,9 @@ AfterTriggerFireDeferred(void) afterTriggerInvokeEvents(events, firing_id, NULL, true); } + if (snap_pushed) + PopActiveSnapshot(); + Assert(events->head == NULL); } |