Re: [HACKERS] advanced partition matching algorithm for partition-wise join
Amit Langote <langote_amit_f8@lab.ntt.co.jp>
From: Amit Langote <Langote_Amit_f8@lab.ntt.co.jp>
To: amul sul <sulamul@gmail.com>,
Ashutosh Bapat <ashutosh.bapat.oss@gmail.com>
Cc: Rajkumar Raghuwanshi <rajkumar.raghuwanshi@enterprisedb.com>,
Etsuro Fujita <fujita.etsuro@lab.ntt.co.jp>,
Dmitry Dolgov <9erthalion6@gmail.com>,
Thomas Munro <thomas.munro@enterprisedb.com>,
Antonin Houska <ah@cybertec.at>, Robert Haas <robertmhaas@gmail.com>,
PostgreSQL-development <pgsql-hackers@postgresql.org>
Date: 2019-05-14T04:23:36Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Suppress unused-variable warning.
- 401418ca6a68 13.0 landed
-
Allow partitionwise joins in more cases.
- c8434d64ce03 13.0 landed
-
Avoid crash in partitionwise join planning under GEQO.
- 7ad6498fd5a6 12.0 cited
- d70c147fa217 11.3 cited
-
Disable support for partitionwise joins in problematic cases.
- 7cfdc77023ad 12.0 cited
-
Add plan_cache_mode setting
- f7cb2842bf47 12.0 cited
-
Add test for partitionwise join involving default partition.
- 4513d3a4be0b 12.0 cited
-
Revise API for partition_rbound_cmp/partition_rbound_datum_cmp.
- b0229235564f 11.0 landed
Hi Amul, Ashutosh, On 2019/04/24 20:26, amul sul wrote: > Attached version is rebase atop of the latest master head(fdc7efcc30), also > incorporates the Ashutosh's suggestion, thanks. Reading the commit message of 0002 and after testing to confirm, I understand that the patch doesn't handle OUTER joins where the nullable side is missing some partitions. The reason given is that join planning would have to add base relations corresponding to missing partitions on the nullable side, which we can't do. While working on partition pruning refactoring recently (committed as 428b260f87e), we faced a similar situation in that pruned partitions are like missing partitions, because they're not added to the PlannerInfo anymore, whereas before that commit, they'd be added and marked dummy afterwards. Earlier versions of my patch had code to add dummy base relations for such pruned partitions, because partitionwise join expected pairs of matched partitions to be valid base relations, because that's how things were when partitionwise joins feature was committed. Join path generated in this case would have a constant-false Result path (an empty relation) for the nullable side. Tom strongly objected to that idea saying that such join paths are kind of silly [1], even outside the context of partitionwise join. He suggested that we abandon partitionwise join in such cases, because having to build a dummy base relation for pruned partitions only to generate silly-looking paths would be an ugly kludge. I guess the same argument applies to the case where the nullable side is missing some partitions, so the right way to support partitionwise join case in that case wouldn't be to figure out how joinrels.c could add dummy base relations. He did mention that cases where the nullable side is provably empty can be handled by simply returning the path of the non-nullable side with suitable projection path added on top to emit NULLs for the columns of the nullable-side. If we teach populate_joinrel_with_paths() and underlings about that, then we can allow partitionwise join even in the case where the nullable side has some partitions missing. Thanks, Amit [1] https://www.postgresql.org/message-id/25035.1553905052%40sss.pgh.pa.us