aboutsummaryrefslogtreecommitdiff
path: root/src/backend/tcop/pquery.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/tcop/pquery.c')
-rw-r--r--src/backend/tcop/pquery.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/backend/tcop/pquery.c b/src/backend/tcop/pquery.c
index fa561a4861a..f9ed266c1ad 100644
--- a/src/backend/tcop/pquery.c
+++ b/src/backend/tcop/pquery.c
@@ -1661,6 +1661,9 @@ DoPortalRunFetch(Portal portal,
static void
DoPortalRewind(Portal portal)
{
+ QueryDesc *queryDesc;
+
+ /* Rewind holdStore, if we have one */
if (portal->holdStore)
{
MemoryContext oldcontext;
@@ -1669,8 +1672,15 @@ DoPortalRewind(Portal portal)
tuplestore_rescan(portal->holdStore);
MemoryContextSwitchTo(oldcontext);
}
- if (PortalGetQueryDesc(portal))
- ExecutorRewind(PortalGetQueryDesc(portal));
+
+ /* Rewind executor, if active */
+ queryDesc = PortalGetQueryDesc(portal);
+ if (queryDesc)
+ {
+ PushActiveSnapshot(queryDesc->snapshot);
+ ExecutorRewind(queryDesc);
+ PopActiveSnapshot();
+ }
portal->atStart = true;
portal->atEnd = false;