Re: Partition-wise join for join between (declaratively) partitioned tables

Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>

From: Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>
To: Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>
Cc: Robert Haas <robertmhaas@gmail.com>, Rafia Sabih <rafia.sabih@enterprisedb.com>, Rajkumar Raghuwanshi <rajkumar.raghuwanshi@enterprisedb.com>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2017-03-27T12:36:06Z
Lists: pgsql-hackers

Attachments

On Fri, Mar 24, 2017 at 4:18 PM, Amit Langote
<Langote_Amit_f8@lab.ntt.co.jp> wrote:
> Hi Ashutosh,
>
> On 2017/03/23 21:48, Ashutosh Bapat wrote:
>>>> I have fixed all the issues reported till now.
>
> I've tried to fix your 0012 patch (Multi-level partitioned table
> expansion) considering your message earlier on this thread [1].
> Especially the fact that no AppendRelInfo and RelOptInfo are allocated for
> partitioned child tables as of commit d3cc37f1d [2].  I've fixed
> expand_inherited_rtentry() such that AppendRelInfo *is* allocated for a
> partitioned child RTEs whose rte->inh is set to true.  Such an RTE is
> recursively expanded with that RTE the parent.
>
> Also as I mentioned elsewhere [3], the multi-level inheritance expansion
> of partitioned table will break update/delete for partitioned table, which
> is because inheritance_planner() is not ready to handle inheritance sets
> structured that way.  I tried to refactor inheritance_planner() such that
> its core logic can be recursively invoked for partitioned child RTEs.  The
> resulting child paths and other auxiliary information related to planning
> across the hierarchy are maintained in one place using a struct to hold
> the same in a few flat lists.  The refactoring didn't break any existing
> tests and a couple of new tests are added to check that it indeed works
> for multi-level partitioned tables expanded using new multi-level structure.
>
> There is some test failure in 0014 (Multi-level partition-wise join
> tests), probably because of the changes I made to 0012, which I didn't get
> time to check why, although I've checked using an example that multi-level
> join planning still works, so it's not completely broken either.
>

I have gone through the patch, and it looks good to me. Here's the set
of patches with this patch included. Fixed the testcase failures.
Rebased the patchset on de4da168d57de812bb30d359394b7913635d21a9.

-- 
Best Wishes,
Ashutosh Bapat
EnterpriseDB Corporation
The Postgres Database Company

Commits

  1. Basic partition-wise join functionality.

  2. Assorted preparatory refactoring for partition-wise join.

  3. Teach adjust_appendrel_attrs(_multilevel) to do multiple translations.

  4. Stamp 10beta2.

  5. Eat XIDs more efficiently in recovery TAP test.

  6. Abstract logic to allow for multiple kinds of child rels.

  7. Implement SortSupport for macaddr data type

  8. Attempt to stabilize grouping sets regression test plans.

  9. Teach xlogreader to follow timeline switches

  10. Don't scan partitioned tables.

  11. Fix grammar.

  12. postgres_fdw: Push down FULL JOINs with restriction clauses.

  13. Some preliminary refactoring towards partitionwise join.

  14. contrib/amcheck needs RecentGlobalXmin to be PGDLLIMPORT'ified.

  15. Print test parameters like "foo: 123", and results like "foo = 123".