diff options
Diffstat (limited to 'src/backend/tcop/pquery.c')
-rw-r--r-- | src/backend/tcop/pquery.c | 14 |
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; |