提交 d5df606c 编写于 作者: T Tom Lane

ActiveSnapshot must be set to something valid while running deferred

triggers during COMMIT.  Per trouble report from Frank van Vugt.
上级 e514da64
...@@ -7,7 +7,7 @@ ...@@ -7,7 +7,7 @@
* Portions Copyright (c) 1994, Regents of the University of California * Portions Copyright (c) 1994, Regents of the University of California
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.175 2004/11/14 02:04:14 neilc Exp $ * $PostgreSQL: pgsql/src/backend/commands/trigger.c,v 1.176 2004/12/06 23:57:17 tgl Exp $
* *
*------------------------------------------------------------------------- *-------------------------------------------------------------------------
*/ */
...@@ -2364,6 +2364,14 @@ AfterTriggerEndXact(void) ...@@ -2364,6 +2364,14 @@ AfterTriggerEndXact(void)
/* ... but not inside a query */ /* ... but not inside a query */
Assert(afterTriggers->query_depth == -1); Assert(afterTriggers->query_depth == -1);
/*
* If there are any triggers to fire, make sure we have set a snapshot
* for them to use. (Since PortalRunUtility doesn't set a snap for
* COMMIT, we can't assume ActiveSnapshot is valid on entry.)
*/
if (afterTriggers->events.head != NULL)
ActiveSnapshot = CopySnapshot(GetTransactionSnapshot());
/* /*
* Run all the remaining triggers. Loop until they are all gone, * Run all the remaining triggers. Loop until they are all gone,
* just in case some trigger queues more for us to do. * just in case some trigger queues more for us to do.
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册