pgsql: Call set_rel_pathlist_hook before generate_gather_paths, not aft

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)lists(dot)postgresql(dot)org
Subject: pgsql: Call set_rel_pathlist_hook before generate_gather_paths, not aft
Date: 2019-02-09 16:41:24
Message-ID: E1gsVgy-0004fE-6x@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Call set_rel_pathlist_hook before generate_gather_paths, not after.

The previous ordering of these steps satisfied the nominal requirement
that set_rel_pathlist_hook could editorialize on the whole set of Paths
constructed for a base relation. In practice, though, trying to change
the set of partial paths was impossible. Adding one didn't work because
(a) it was too late to be included in Gather paths made by the core code,
and (b) calling add_partial_path after generate_gather_paths is unsafe,
because it might try to delete a path it thinks is dominated, but that
is already embedded in some Gather path(s). Nor could the hook safely
remove partial paths, for the same reason that they might already be
embedded in Gathers.

Better to call extensions first, let them add partial paths as desired,
and then gather. In v11 and up, we already doubled down on that ordering
by postponing gathering even further for single-relation queries; so even
if the hook wished to editorialize on Gather path construction, it could
not.

Report and patch by KaiGai Kohei. Back-patch to 9.6 where Gather paths
were added.

Discussion: https://postgr.es/m/CAOP8fzahwpKJRTVVTqo2AE=mDTz_efVzV6Get_0=U3SO+-ha1A@mail.gmail.com

Branch
------
REL_10_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/dc0eb137fec20c4f2d168dfcb6bda001a27ad548

Modified Files
--------------
doc/src/sgml/custom-scan.sgml | 5 +++--
src/backend/optimizer/path/allpaths.c | 27 ++++++++++++++++-----------
2 files changed, 19 insertions(+), 13 deletions(-)

Browse pgsql-committers by date

  From Date Subject
Next Message Stephen Frost 2019-02-09 18:35:52 Re: pgsql: Allow some recovery parameters to be changed with reload
Previous Message Peter Eisentraut 2019-02-09 15:06:10 Re: pgsql: Restrict the use of temporary namespace in two-phase transaction