pgsql: Fix parallel query so it doesn't spoil row estimates above Gathe

From: Robert Haas <rhaas(at)postgresql(dot)org>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Fix parallel query so it doesn't spoil row estimates above Gathe
Date: 2017-04-01 01:13:26
Message-ID: E1cu7ba-0001sp-10@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Fix parallel query so it doesn't spoil row estimates above Gather.

Commit 45be99f8cd5d606086e0a458c9c72910ba8a613d removed GatherPath's
num_workers field, but this is entirely bogus. Normally, a path's
parallel_workers flag is supposed to indicate the number of workers
that it wants, and should be 0 for a non-partial path. In that
commit, I mistakenly thought that GatherPath could also use that field
to indicate the number of workers that it would try to start, but
that's disastrous, because then it can propagate up to higher nodes in
the plan tree, which will then get incorrect rowcounts because the
parallel_workers flag is involved in computing those values. Repair
by putting the separate field back.

Report by Tomas Vondra. Patch by me, reviewed by Amit Kapila.

Discussion: http://postgr.es/m/f91b4a44-f739-04bd-c4b6-f135bd643669@2ndquadrant.com

Branch
------
REL9_6_STABLE

Details
-------
http://git.postgresql.org/pg/commitdiff/fb1879c374581c0f0e251e94c0087c8385b91f5b

Modified Files
--------------
src/backend/nodes/outfuncs.c | 1 +
src/backend/optimizer/plan/createplan.c | 2 +-
src/backend/optimizer/util/pathnode.c | 7 ++++---
src/include/nodes/relation.h | 1 +
4 files changed, 7 insertions(+), 4 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Robert Haas 2017-04-01 01:22:14 pgsql: Avoid GatherMerge crash when there are no workers.
Previous Message Robert Haas 2017-04-01 00:52:54 pgsql: Don't use bgw_main even to specify in-core bgworker entrypoints.