pgsql: Expand partitioned table RTEs level by level, without flattening

From: Robert Haas <rhaas(at)postgresql(dot)org>
To: pgsql-committers(at)postgresql(dot)org
Subject: pgsql: Expand partitioned table RTEs level by level, without flattening
Date: 2017-09-14 19:41:55
Message-ID: E1dsa1L-0004yv-JL@gemulon.postgresql.org
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-committers pgsql-hackers

Expand partitioned table RTEs level by level, without flattening.

Flattening the partitioning hierarchy at this stage makes various
desirable optimizations difficult. The original use case for this
patch was partition-wise join, which wants to match up the partitions
in one partitioning hierarchy with those in another such hierarchy.
However, it now seems that it will also be useful in making partition
pruning work using the PartitionDesc rather than constraint exclusion,
because with a flattened expansion, we have no easy way to figure out
which PartitionDescs apply to which leaf tables in a multi-level
partition hierarchy.

As it turns out, we end up creating both rte->inh and !rte->inh RTEs
for each intermediate partitioned table, just as we previously did for
the root table. This seems unnecessary since the partitioned tables
have no storage and are not scanned. We might want to go back and
rejigger things so that no partitioned tables (including the parent)
need !rte->inh RTEs, but that seems to require some adjustments not
related to the core purpose of this patch.

Ashutosh Bapat, reviewed by me and by Amit Langote. Some final
adjustments by me.

Discussion: http://postgr.es/m/CAFjFpRd=1venqLL7oGU=C1dEkuvk2DJgvF+7uKbnPHaum1mvHQ@mail.gmail.com

Branch
------
master

Details
-------
https://git.postgresql.org/pg/commitdiff/0a480502b092195a9b25a2f0f199a21d592a9c57

Modified Files
--------------
src/backend/optimizer/path/allpaths.c | 28 ++--
src/backend/optimizer/plan/initsplan.c | 22 +++-
src/backend/optimizer/plan/planner.c | 80 ++++++++---
src/backend/optimizer/prep/prepunion.c | 234 +++++++++++++++++++--------------
src/include/nodes/relation.h | 8 +-
src/test/regress/expected/inherit.out | 22 ++++
src/test/regress/expected/join.out | 53 ++++++++
src/test/regress/sql/inherit.sql | 17 +++
src/test/regress/sql/join.sql | 23 ++++
9 files changed, 350 insertions(+), 137 deletions(-)

Responses

Browse pgsql-committers by date

  From Date Subject
Next Message Andres Freund 2017-09-14 21:18:53 pgsql: Perform only one ReadControlFile() during startup.
Previous Message Peter Eisentraut 2017-09-14 17:28:02 pgsql: Avoid use of bool in thread_test.c

Browse pgsql-hackers by date

  From Date Subject
Next Message Robert Haas 2017-09-14 19:43:50 Re: Partition-wise join for join between (declaratively) partitioned tables
Previous Message Nico Williams 2017-09-14 19:41:12 COMMIT TRIGGERs, take n, implemented with CONSTRAINT TRIGGERS