mirror of
https://github.com/postgres/postgres.git
synced 2025-07-27 12:41:57 +03:00
Allow partitionwise joins in more cases.
Previously, the partitionwise join technique only allowed partitionwise join when input partitioned tables had exactly the same partition bounds. This commit extends the technique to some cases when the tables have different partition bounds, by using an advanced partition-matching algorithm introduced by this commit. For both the input partitioned tables, the algorithm checks whether every partition of one input partitioned table only matches one partition of the other input partitioned table at most, and vice versa. In such a case the join between the tables can be broken down into joins between the matching partitions, so the algorithm produces the pairs of the matching partitions, plus the partition bounds for the join relation, to allow partitionwise join for computing the join. Currently, the algorithm works for list-partitioned and range-partitioned tables, but not hash-partitioned tables. See comments in partition_bounds_merge(). Ashutosh Bapat and Etsuro Fujita, most of regression tests by Rajkumar Raghuwanshi, some of the tests by Mark Dilger and Amul Sul, reviewed by Dmitry Dolgov and Amul Sul, with additional review at various points by Ashutosh Bapat, Mark Dilger, Robert Haas, Antonin Houska, Amit Langote, Justin Pryzby, and Tomas Vondra Discussion: https://postgr.es/m/CAFjFpRdjQvaUEV5DJX3TW6pU5eq54NCkadtxHX2JiJG_GvbrCA@mail.gmail.com
This commit is contained in:
@ -4749,9 +4749,9 @@ ANY <replaceable class="parameter">num_sync</replaceable> ( <replaceable class="
|
||||
which allows a join between partitioned tables to be performed by
|
||||
joining the matching partitions. Partitionwise join currently applies
|
||||
only when the join conditions include all the partition keys, which
|
||||
must be of the same data type and have exactly matching sets of child
|
||||
partitions. Because partitionwise join planning can use significantly
|
||||
more CPU time and memory during planning, the default is
|
||||
must be of the same data type and have one-to-one matching sets of
|
||||
child partitions. Because partitionwise join planning can use
|
||||
significantly more CPU time and memory during planning, the default is
|
||||
<literal>off</literal>.
|
||||
</para>
|
||||
</listitem>
|
||||
|
Reference in New Issue
Block a user