]> granicus.if.org Git - postgresql/commitdiff
Fix Parallel Append crash.
authorRobert Haas <rhaas@postgresql.org>
Wed, 6 Dec 2017 13:42:50 +0000 (08:42 -0500)
committerRobert Haas <rhaas@postgresql.org>
Wed, 6 Dec 2017 13:42:50 +0000 (08:42 -0500)
Reported by Tom Lane and the buildfarm.

Amul Sul and Amit Khandekar

Discussion: http://postgr.es/m/17868.1512519318@sss.pgh.pa.us
Discussion: http://postgr.es/m/CAJ3gD9cJQ4d-XhmZ6BqM9rMM2KDBfpkdgOAb4+psz56uBuMQ_A@mail.gmail.com

src/backend/executor/nodeAppend.c

index 246a0b2d852a0e6331791168bf35ff531eccf7f3..0e9371373c106dce08d04421c75cc4a5f67ee42a 100644 (file)
@@ -506,8 +506,16 @@ choose_next_subplan_for_worker(AppendState *node)
        node->as_whichplan = pstate->pa_next_plan++;
        if (pstate->pa_next_plan >= node->as_nplans)
        {
-               Assert(append->first_partial_plan < node->as_nplans);
-               pstate->pa_next_plan = append->first_partial_plan;
+               if (append->first_partial_plan < node->as_nplans)
+                       pstate->pa_next_plan = append->first_partial_plan;
+               else
+               {
+                       /*
+                        * We have only non-partial plans, and we already chose the last
+                        * one; so arrange for the other workers to immediately bail out.
+                        */
+                       pstate->pa_next_plan = INVALID_SUBPLAN_INDEX;
+               }
        }
 
        /* If non-partial, immediately mark as finished. */