pgsql: Teach reparameterize_path() to handle AppendPaths.

From: Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Teach reparameterize_path() to handle AppendPaths.
Date: 2018-01-23 21:50:52
Message-ID: E1ee6Sy-0008U9-8C@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers

Teach reparameterize_path() to handle AppendPaths.

If we're inside a lateral subquery, there may be no unparameterized paths
for a particular child relation of an appendrel, in which case we *must*
be able to create similarly-parameterized paths for each other child
relation, else the planner will fail with "could not devise a query plan
for the given query". This means that there are situations where we'd
better be able to reparameterize at least one path for each child.

This calls into question the assumption in reparameterize_path() that
it can just punt if it feels like it. However, the only case that is
known broken right now is where the child is itself an appendrel so that
all its paths are AppendPaths. (I think possibly I disregarded that in
the original coding on the theory that nested appendrels would get folded
together --- but that only happens *after* reparameterize_path(), so it's
not excused from handling a child AppendPath.) Given that this code's been
like this since 9.3 when LATERAL was introduced, it seems likely we'd have
heard of other cases by now if there were a larger problem.

Per report from Elvis Pranskevichus. Back-patch to 9.3.

Discussion: https://postgr.es/m/5981018.zdth1YWmNy@hammer.magicstack.net

Branch
------
REL9_5_STABLE

Details
-------
https://git.postgresql.org/pg/commitdiff/8a2228b2f5dc7a52590cef97bf496fcf143db6de

Modified Files
--------------
src/backend/optimizer/util/pathnode.c | 22 ++++++++++++++++++++++
src/test/regress/expected/join.out | 19 +++++++++++++++++++
src/test/regress/sql/join.sql | 10 ++++++++++
3 files changed, 51 insertions(+)

Browse pgsql-committers by date

  From Date Subject
Next Message Tom Lane 2018-01-23 23:10:56 Re: pgsql: Add parallel-aware hash joins.
Previous Message Robert Haas 2018-01-23 19:24:56 Re: pgsql: Add parallel-aware hash joins.