From ca04790c276d1b97e19bd635b8221f9be1b6be59 Mon Sep 17 00:00:00 2001 From: Robert Haas Date: Thu, 22 Oct 2015 10:33:40 -0400 Subject: [PATCH] Test code. --- src/backend/access/transam/parallel.c | 2 ++ src/backend/commands/explain.c | 11 +++++++++++ src/backend/optimizer/plan/planner.c | 9 ++++++++- 3 files changed, 21 insertions(+), 1 deletion(-) diff --git a/src/backend/access/transam/parallel.c b/src/backend/access/transam/parallel.c index 171356f3d5..fa0cb86e49 100644 --- a/src/backend/access/transam/parallel.c +++ b/src/backend/access/transam/parallel.c @@ -1080,7 +1080,9 @@ ParallelExtensionTrampoline(dsm_segment *seg, shm_toc *toc) static void ParallelErrorContext(void *arg) { +#if 0 errcontext("parallel worker, pid %d", *(int32 *) arg); +#endif } /* diff --git a/src/backend/commands/explain.c b/src/backend/commands/explain.c index 7fb8a1458d..12a59a3560 100644 --- a/src/backend/commands/explain.c +++ b/src/backend/commands/explain.c @@ -798,6 +798,17 @@ ExplainNode(PlanState *planstate, List *ancestors, int save_indent = es->indent; bool haschildren; + if (IsA(planstate, GatherState)) + { + Gather *gather = (Gather *) plan; + if (gather->single_copy) + { + ExplainNode(outerPlanState(planstate), ancestors, relationship, + plan_name, es); + return; + } + } + switch (nodeTag(plan)) { case T_Result: diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c index c0db458ad0..34ce39c56a 100644 --- a/src/backend/optimizer/plan/planner.c +++ b/src/backend/optimizer/plan/planner.c @@ -1889,7 +1889,12 @@ grouping_planner(PlannerInfo *root, double tuple_fraction) */ bool need_sort_for_grouping = false; - result_plan = create_plan(root, best_path); + /* Try to run it in a worker. */ + if (best_path->parallel_safe) + best_path = (Path *) + create_single_copy_gather_path(root, final_rel, + best_path, NULL); + current_pathkeys = best_path->pathkeys; /* Detect if we'll need an explicit sort for grouping */ @@ -1905,6 +1910,8 @@ grouping_planner(PlannerInfo *root, double tuple_fraction) need_tlist_eval = true; } + result_plan = create_plan(root, best_path); + /* * create_plan returns a plan with just a "flat" tlist of required * Vars. Usually we need to insert the sub_tlist as the tlist of -- 2.39.5