]> granicus.if.org Git - postgresql/commitdiff
Fix test for subplans in force-parallel mode.
authorTom Lane <tgl@sss.pgh.pa.us>
Mon, 21 Nov 2016 16:09:24 +0000 (11:09 -0500)
committerTom Lane <tgl@sss.pgh.pa.us>
Mon, 21 Nov 2016 16:09:24 +0000 (11:09 -0500)
We mustn't force parallel mode if the query has any subplans, since
ExecSerializePlan doesn't transmit them to workers.  Testing
top_plan->initPlan is inadequate because (1) there might be initPlans
attached to lower plan nodes, and (2) non-initPlan subplans don't
work either.  There's certainly room for improvement in those
restrictions, but for the moment that's what we've got.

Amit Kapila, per report from Andreas Seltenreich

Discussion: <8737im6pmh.fsf@credativ.de>

src/backend/optimizer/plan/planner.c

index d8c5dd34d6a314a9d229b4dfceb20cf1c3aef82d..a8847defba3b4e1a361c5c4f7cd085a509015490 100644 (file)
@@ -342,11 +342,11 @@ standard_planner(Query *parse, int cursorOptions, ParamListInfo boundParams)
         * actually a safe thing to do.  (Note: we assume adding a Material node
         * above did not change the parallel safety of the plan, so we can still
         * rely on best_path->parallel_safe.  However, that flag doesn't account
-        * for initPlans, which render the plan parallel-unsafe.)
+        * for subplans, which we are unable to transmit to workers presently.)
         */
        if (force_parallel_mode != FORCE_PARALLEL_OFF &&
                best_path->parallel_safe &&
-               top_plan->initPlan == NIL)
+               glob->subplans == NIL)
        {
                Gather     *gather = makeNode(Gather);