diff options
Diffstat (limited to 'src/backend/executor')
-rw-r--r-- | src/backend/executor/nodeGather.c | 8 | ||||
-rw-r--r-- | src/backend/executor/nodeGatherMerge.c | 6 |
2 files changed, 9 insertions, 5 deletions
diff --git a/src/backend/executor/nodeGather.c b/src/backend/executor/nodeGather.c index 639f4f5af88..0298c65d065 100644 --- a/src/backend/executor/nodeGather.c +++ b/src/backend/executor/nodeGather.c @@ -38,6 +38,7 @@ #include "executor/nodeSubplan.h" #include "executor/tqueue.h" #include "miscadmin.h" +#include "optimizer/planmain.h" #include "pgstat.h" #include "utils/memutils.h" #include "utils/rel.h" @@ -73,7 +74,8 @@ ExecInitGather(Gather *node, EState *estate, int eflags) gatherstate->ps.ExecProcNode = ExecGather; gatherstate->initialized = false; - gatherstate->need_to_scan_locally = !node->single_copy; + gatherstate->need_to_scan_locally = + !node->single_copy && parallel_leader_participation; gatherstate->tuples_needed = -1; /* @@ -193,9 +195,9 @@ ExecGather(PlanState *pstate) node->nextreader = 0; } - /* Run plan locally if no workers or not single-copy. */ + /* Run plan locally if no workers or enabled and not single-copy. */ node->need_to_scan_locally = (node->nreaders == 0) - || !gather->single_copy; + || (!gather->single_copy && parallel_leader_participation); node->initialized = true; } diff --git a/src/backend/executor/nodeGatherMerge.c b/src/backend/executor/nodeGatherMerge.c index 5625b125210..7206ab91975 100644 --- a/src/backend/executor/nodeGatherMerge.c +++ b/src/backend/executor/nodeGatherMerge.c @@ -23,6 +23,7 @@ #include "executor/tqueue.h" #include "lib/binaryheap.h" #include "miscadmin.h" +#include "optimizer/planmain.h" #include "utils/memutils.h" #include "utils/rel.h" @@ -233,8 +234,9 @@ ExecGatherMerge(PlanState *pstate) } } - /* always allow leader to participate */ - node->need_to_scan_locally = true; + /* allow leader to participate if enabled or no choice */ + if (parallel_leader_participation || node->nreaders == 0) + node->need_to_scan_locally = true; node->initialized = true; } |