diff options
author | Peter Eisentraut <peter_e@gmx.net> | 2018-02-16 10:33:59 -0500 |
---|---|---|
committer | Peter Eisentraut <peter_e@gmx.net> | 2018-02-16 10:33:59 -0500 |
commit | 2fb1abaeb016aeb45b9e6d0b81b7a7e92bb251b9 (patch) | |
tree | dbaa85975553ce1c440d786a0c16bfa95c014e5e /src | |
parent | f8437c819acc37b43bd2d5b19a6b7609b4ea1292 (diff) | |
download | postgresql-2fb1abaeb016aeb45b9e6d0b81b7a7e92bb251b9.tar.gz postgresql-2fb1abaeb016aeb45b9e6d0b81b7a7e92bb251b9.zip |
Rename enable_partition_wise_join to enable_partitionwise_join
Discussion: https://www.postgresql.org/message-id/flat/ad24e4f4-6481-066e-e3fb-6ef4a3121882%402ndquadrant.com
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/optimizer/README | 6 | ||||
-rw-r--r-- | src/backend/optimizer/geqo/geqo_eval.c | 4 | ||||
-rw-r--r-- | src/backend/optimizer/path/allpaths.c | 20 | ||||
-rw-r--r-- | src/backend/optimizer/path/costsize.c | 2 | ||||
-rw-r--r-- | src/backend/optimizer/path/joinrels.c | 24 | ||||
-rw-r--r-- | src/backend/optimizer/util/relnode.c | 6 | ||||
-rw-r--r-- | src/backend/utils/misc/guc.c | 6 | ||||
-rw-r--r-- | src/backend/utils/misc/postgresql.conf.sample | 2 | ||||
-rw-r--r-- | src/include/optimizer/cost.h | 2 | ||||
-rw-r--r-- | src/include/optimizer/paths.h | 2 | ||||
-rw-r--r-- | src/test/regress/expected/partition_join.out | 22 | ||||
-rw-r--r-- | src/test/regress/expected/sysviews.out | 34 | ||||
-rw-r--r-- | src/test/regress/sql/partition_join.sql | 22 |
13 files changed, 76 insertions, 76 deletions
diff --git a/src/backend/optimizer/README b/src/backend/optimizer/README index 1e4084dcf4c..84e60f7f6f0 100644 --- a/src/backend/optimizer/README +++ b/src/backend/optimizer/README @@ -1076,8 +1076,8 @@ plan as possible. Expanding the range of cases in which more work can be pushed below the Gather (and costing them accurately) is likely to keep us busy for a long time to come. -Partition-wise joins --------------------- +Partitionwise joins +------------------- A join between two similarly partitioned tables can be broken down into joins between their matching partitions if there exists an equi-join condition between the partition keys of the joining tables. The equi-join between @@ -1089,7 +1089,7 @@ partitioned in the same way as the joining relations, thus allowing an N-way join between similarly partitioned tables having equi-join condition between their partition keys to be broken down into N-way joins between their matching partitions. This technique of breaking down a join between partitioned tables -into joins between their partitions is called partition-wise join. We will use +into joins between their partitions is called partitionwise join. We will use term "partitioned relation" for either a partitioned table or a join between compatibly partitioned tables. diff --git a/src/backend/optimizer/geqo/geqo_eval.c b/src/backend/optimizer/geqo/geqo_eval.c index 9053cfd0b95..57f0f594e5b 100644 --- a/src/backend/optimizer/geqo/geqo_eval.c +++ b/src/backend/optimizer/geqo/geqo_eval.c @@ -264,8 +264,8 @@ merge_clump(PlannerInfo *root, List *clumps, Clump *new_clump, bool force) /* Keep searching if join order is not valid */ if (joinrel) { - /* Create paths for partition-wise joins. */ - generate_partition_wise_join_paths(root, joinrel); + /* Create paths for partitionwise joins. */ + generate_partitionwise_join_paths(root, joinrel); /* Create GatherPaths for any useful partial paths for rel */ generate_gather_paths(root, joinrel); diff --git a/src/backend/optimizer/path/allpaths.c b/src/backend/optimizer/path/allpaths.c index 6e842f93d0f..f714247ebb0 100644 --- a/src/backend/optimizer/path/allpaths.c +++ b/src/backend/optimizer/path/allpaths.c @@ -929,7 +929,7 @@ set_append_rel_size(PlannerInfo *root, RelOptInfo *rel, /* * We need attr_needed data for building targetlist of a join * relation representing join between matching partitions for - * partition-wise join. A given attribute of a child will be + * partitionwise join. A given attribute of a child will be * needed in the same highest joinrel where the corresponding * attribute of parent is needed. Hence it suffices to use the * same Relids set for parent and child. @@ -973,7 +973,7 @@ set_append_rel_size(PlannerInfo *root, RelOptInfo *rel, /* * Copy/Modify targetlist. Even if this child is deemed empty, we need * its targetlist in case it falls on nullable side in a child-join - * because of partition-wise join. + * because of partitionwise join. * * NB: the resulting childrel->reltarget->exprs may contain arbitrary * expressions, which otherwise would not occur in a rel's targetlist. @@ -2636,7 +2636,7 @@ standard_join_search(PlannerInfo *root, int levels_needed, List *initial_rels) join_search_one_level(root, lev); /* - * Run generate_partition_wise_join_paths() and + * Run generate_partitionwise_join_paths() and * generate_gather_paths() for each just-processed joinrel. We could * not do this earlier because both regular and partial paths can get * added to a particular joinrel at multiple times within @@ -2649,8 +2649,8 @@ standard_join_search(PlannerInfo *root, int levels_needed, List *initial_rels) { rel = (RelOptInfo *) lfirst(lc); - /* Create paths for partition-wise joins. */ - generate_partition_wise_join_paths(root, rel); + /* Create paths for partitionwise joins. */ + generate_partitionwise_join_paths(root, rel); /* Create GatherPaths for any useful partial paths for rel */ generate_gather_paths(root, rel); @@ -3405,8 +3405,8 @@ compute_parallel_worker(RelOptInfo *rel, double heap_pages, double index_pages, } /* - * generate_partition_wise_join_paths - * Create paths representing partition-wise join for given partitioned + * generate_partitionwise_join_paths + * Create paths representing partitionwise join for given partitioned * join relation. * * This must not be called until after we are done adding paths for all @@ -3414,7 +3414,7 @@ compute_parallel_worker(RelOptInfo *rel, double heap_pages, double index_pages, * generated here has a reference. */ void -generate_partition_wise_join_paths(PlannerInfo *root, RelOptInfo *rel) +generate_partitionwise_join_paths(PlannerInfo *root, RelOptInfo *rel) { List *live_children = NIL; int cnt_parts; @@ -3442,8 +3442,8 @@ generate_partition_wise_join_paths(PlannerInfo *root, RelOptInfo *rel) Assert(child_rel != NULL); - /* Add partition-wise join paths for partitioned child-joins. */ - generate_partition_wise_join_paths(root, child_rel); + /* Add partitionwise join paths for partitioned child-joins. */ + generate_partitionwise_join_paths(root, child_rel); /* Dummy children will not be scanned, so ignore those. */ if (IS_DUMMY_REL(child_rel)) diff --git a/src/backend/optimizer/path/costsize.c b/src/backend/optimizer/path/costsize.c index 29fea48ee23..16ef348f408 100644 --- a/src/backend/optimizer/path/costsize.c +++ b/src/backend/optimizer/path/costsize.c @@ -127,7 +127,7 @@ bool enable_material = true; bool enable_mergejoin = true; bool enable_hashjoin = true; bool enable_gathermerge = true; -bool enable_partition_wise_join = false; +bool enable_partitionwise_join = false; bool enable_parallel_append = true; bool enable_parallel_hash = true; diff --git a/src/backend/optimizer/path/joinrels.c b/src/backend/optimizer/path/joinrels.c index f74afdb4dda..3f1c1b3477e 100644 --- a/src/backend/optimizer/path/joinrels.c +++ b/src/backend/optimizer/path/joinrels.c @@ -39,7 +39,7 @@ static bool restriction_is_constant_false(List *restrictlist, static void populate_joinrel_with_paths(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, RelOptInfo *joinrel, SpecialJoinInfo *sjinfo, List *restrictlist); -static void try_partition_wise_join(PlannerInfo *root, RelOptInfo *rel1, +static void try_partitionwise_join(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, RelOptInfo *joinrel, SpecialJoinInfo *parent_sjinfo, List *parent_restrictlist); @@ -903,8 +903,8 @@ populate_joinrel_with_paths(PlannerInfo *root, RelOptInfo *rel1, break; } - /* Apply partition-wise join technique, if possible. */ - try_partition_wise_join(root, rel1, rel2, joinrel, sjinfo, restrictlist); + /* Apply partitionwise join technique, if possible. */ + try_partitionwise_join(root, rel1, rel2, joinrel, sjinfo, restrictlist); } @@ -1286,25 +1286,25 @@ restriction_is_constant_false(List *restrictlist, bool only_pushed_down) /* * Assess whether join between given two partitioned relations can be broken * down into joins between matching partitions; a technique called - * "partition-wise join" + * "partitionwise join" * - * Partition-wise join is possible when a. Joining relations have same + * Partitionwise join is possible when a. Joining relations have same * partitioning scheme b. There exists an equi-join between the partition keys * of the two relations. * - * Partition-wise join is planned as follows (details: optimizer/README.) + * Partitionwise join is planned as follows (details: optimizer/README.) * * 1. Create the RelOptInfos for joins between matching partitions i.e * child-joins and add paths to them. * * 2. Construct Append or MergeAppend paths across the set of child joins. - * This second phase is implemented by generate_partition_wise_join_paths(). + * This second phase is implemented by generate_partitionwise_join_paths(). * * The RelOptInfo, SpecialJoinInfo and restrictlist for each child join are * obtained by translating the respective parent join structures. */ static void -try_partition_wise_join(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, +try_partitionwise_join(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, RelOptInfo *joinrel, SpecialJoinInfo *parent_sjinfo, List *parent_restrictlist) { @@ -1334,7 +1334,7 @@ try_partition_wise_join(PlannerInfo *root, RelOptInfo *rel1, RelOptInfo *rel2, joinrel->part_scheme == rel2->part_scheme); /* - * Since we allow partition-wise join only when the partition bounds of + * Since we allow partitionwise join only when the partition bounds of * the joining relations exactly match, the partition bounds of the join * should match those of the joining relations. */ @@ -1478,7 +1478,7 @@ have_partkey_equi_join(RelOptInfo *rel1, RelOptInfo *rel2, JoinType jointype, /* * Only clauses referencing the partition keys are useful for - * partition-wise join. + * partitionwise join. */ ipk1 = match_expr_to_partition_keys(expr1, rel1, strict_op); if (ipk1 < 0) @@ -1489,13 +1489,13 @@ have_partkey_equi_join(RelOptInfo *rel1, RelOptInfo *rel2, JoinType jointype, /* * If the clause refers to keys at different ordinal positions, it can - * not be used for partition-wise join. + * not be used for partitionwise join. */ if (ipk1 != ipk2) continue; /* - * The clause allows partition-wise join if only it uses the same + * The clause allows partitionwise join if only it uses the same * operator family as that specified by the partition key. */ if (rel1->part_scheme->strategy == PARTITION_STRATEGY_HASH) diff --git a/src/backend/optimizer/util/relnode.c b/src/backend/optimizer/util/relnode.c index 5c368321e6e..da8f0f93fc0 100644 --- a/src/backend/optimizer/util/relnode.c +++ b/src/backend/optimizer/util/relnode.c @@ -1601,15 +1601,15 @@ build_joinrel_partition_info(RelOptInfo *joinrel, RelOptInfo *outer_rel, int cnt; PartitionScheme part_scheme; - /* Nothing to do if partition-wise join technique is disabled. */ - if (!enable_partition_wise_join) + /* Nothing to do if partitionwise join technique is disabled. */ + if (!enable_partitionwise_join) { Assert(!IS_PARTITIONED_REL(joinrel)); return; } /* - * We can only consider this join as an input to further partition-wise + * We can only consider this join as an input to further partitionwise * joins if (a) the input relations are partitioned, (b) the partition * schemes match, and (c) we can identify an equi-join between the * partition keys. Note that if it were possible for diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 87ba67661a4..1db7845d5ab 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -914,11 +914,11 @@ static struct config_bool ConfigureNamesBool[] = NULL, NULL, NULL }, { - {"enable_partition_wise_join", PGC_USERSET, QUERY_TUNING_METHOD, - gettext_noop("Enables partition-wise join."), + {"enable_partitionwise_join", PGC_USERSET, QUERY_TUNING_METHOD, + gettext_noop("Enables partitionwise join."), NULL }, - &enable_partition_wise_join, + &enable_partitionwise_join, false, NULL, NULL, NULL }, diff --git a/src/backend/utils/misc/postgresql.conf.sample b/src/backend/utils/misc/postgresql.conf.sample index 9a3535559e1..39272925fb7 100644 --- a/src/backend/utils/misc/postgresql.conf.sample +++ b/src/backend/utils/misc/postgresql.conf.sample @@ -303,7 +303,7 @@ #enable_seqscan = on #enable_sort = on #enable_tidscan = on -#enable_partition_wise_join = off +#enable_partitionwise_join = off #enable_parallel_hash = on # - Planner Cost Constants - diff --git a/src/include/optimizer/cost.h b/src/include/optimizer/cost.h index 0e9f858b9e8..132e35551bd 100644 --- a/src/include/optimizer/cost.h +++ b/src/include/optimizer/cost.h @@ -67,7 +67,7 @@ extern PGDLLIMPORT bool enable_material; extern PGDLLIMPORT bool enable_mergejoin; extern PGDLLIMPORT bool enable_hashjoin; extern PGDLLIMPORT bool enable_gathermerge; -extern PGDLLIMPORT bool enable_partition_wise_join; +extern PGDLLIMPORT bool enable_partitionwise_join; extern PGDLLIMPORT bool enable_parallel_append; extern PGDLLIMPORT bool enable_parallel_hash; extern PGDLLIMPORT int constraint_exclusion; diff --git a/src/include/optimizer/paths.h b/src/include/optimizer/paths.h index 4708443c395..c9e44318ad9 100644 --- a/src/include/optimizer/paths.h +++ b/src/include/optimizer/paths.h @@ -58,7 +58,7 @@ extern int compute_parallel_worker(RelOptInfo *rel, double heap_pages, double index_pages, int max_workers); extern void create_partial_bitmap_paths(PlannerInfo *root, RelOptInfo *rel, Path *bitmapqual); -extern void generate_partition_wise_join_paths(PlannerInfo *root, +extern void generate_partitionwise_join_paths(PlannerInfo *root, RelOptInfo *rel); #ifdef OPTIMIZER_DEBUG diff --git a/src/test/regress/expected/partition_join.out b/src/test/regress/expected/partition_join.out index 333f93889cf..636bedadf2e 100644 --- a/src/test/regress/expected/partition_join.out +++ b/src/test/regress/expected/partition_join.out @@ -1,9 +1,9 @@ -- -- PARTITION_JOIN --- Test partition-wise join between partitioned tables +-- Test partitionwise join between partitioned tables -- --- Enable partition-wise join, which by default is disabled. -SET enable_partition_wise_join to true; +-- Enable partitionwise join, which by default is disabled. +SET enable_partitionwise_join to true; -- -- partitioned by a single column -- @@ -1578,7 +1578,7 @@ SELECT t1.a, t1.c, t2.b, t2.c FROM (SELECT * FROM prt1_l WHERE prt1_l.b = 0) t1 | | 525 | 0001 (16 rows) --- lateral partition-wise join +-- lateral partitionwise join EXPLAIN (COSTS OFF) SELECT * FROM prt1_l t1 LEFT JOIN LATERAL (SELECT t2.a AS t2a, t2.c AS t2c, t2.b AS t2b, t3.b AS t3b, least(t1.a,t2.a,t3.b) FROM prt1_l t2 JOIN prt2_l t3 ON (t2.a = t3.b AND t2.c = t3.c)) ss @@ -1695,7 +1695,7 @@ CREATE TABLE prt4_n_p2 PARTITION OF prt4_n FOR VALUES FROM (300) TO (500); CREATE TABLE prt4_n_p3 PARTITION OF prt4_n FOR VALUES FROM (500) TO (600); INSERT INTO prt4_n SELECT i, i, to_char(i, 'FM0000') FROM generate_series(0, 599, 2) i; ANALYZE prt4_n; --- partition-wise join can not be applied if the partition ranges differ +-- partitionwise join can not be applied if the partition ranges differ EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1 t1, prt4_n t2 WHERE t1.a = t2.a; QUERY PLAN @@ -1742,7 +1742,7 @@ SELECT t1.a, t1.c, t2.b, t2.c FROM prt1 t1, prt4_n t2, prt2 t3 WHERE t1.a = t2.a -> Seq Scan on prt2_p3 t3_2 (23 rows) --- partition-wise join can not be applied if there are no equi-join conditions +-- partitionwise join can not be applied if there are no equi-join conditions -- between partition keys EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1 t1 LEFT JOIN prt2 t2 ON (t1.a < t2.b); @@ -1763,7 +1763,7 @@ SELECT t1.a, t1.c, t2.b, t2.c FROM prt1 t1 LEFT JOIN prt2 t2 ON (t1.a < t2.b); (12 rows) -- equi-join with join condition on partial keys does not qualify for --- partition-wise join +-- partitionwise join EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1_m t1, prt2_m t2 WHERE t1.a = (t2.b + t2.a)/2; QUERY PLAN @@ -1782,7 +1782,7 @@ SELECT t1.a, t1.c, t2.b, t2.c FROM prt1_m t1, prt2_m t2 WHERE t1.a = (t2.b + t2. (11 rows) -- equi-join between out-of-order partition key columns does not qualify for --- partition-wise join +-- partitionwise join EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1_m t1 LEFT JOIN prt2_m t2 ON t1.a = t2.b; QUERY PLAN @@ -1800,7 +1800,7 @@ SELECT t1.a, t1.c, t2.b, t2.c FROM prt1_m t1 LEFT JOIN prt2_m t2 ON t1.a = t2.b; -> Seq Scan on prt2_m_p3 t2_2 (11 rows) --- equi-join between non-key columns does not qualify for partition-wise join +-- equi-join between non-key columns does not qualify for partitionwise join EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1_m t1 LEFT JOIN prt2_m t2 ON t1.c = t2.c; QUERY PLAN @@ -1818,7 +1818,7 @@ SELECT t1.a, t1.c, t2.b, t2.c FROM prt1_m t1 LEFT JOIN prt2_m t2 ON t1.c = t2.c; -> Seq Scan on prt2_m_p3 t2_2 (11 rows) --- partition-wise join can not be applied between tables with different +-- partitionwise join can not be applied between tables with different -- partition lists EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1_n t1 LEFT JOIN prt2_n t2 ON (t1.c = t2.c); @@ -1857,7 +1857,7 @@ SELECT t1.a, t1.c, t2.b, t2.c FROM prt1_n t1 JOIN prt2_n t2 ON (t1.c = t2.c) JOI -> Seq Scan on prt1_n_p2 t1_1 (16 rows) --- partition-wise join can not be applied for a join between list and range +-- partitionwise join can not be applied for a join between list and range -- partitioned table EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1_n t1 FULL JOIN prt1 t2 ON (t1.c = t2.c); diff --git a/src/test/regress/expected/sysviews.out b/src/test/regress/expected/sysviews.out index c9c8f51e1c5..759f7d9d597 100644 --- a/src/test/regress/expected/sysviews.out +++ b/src/test/regress/expected/sysviews.out @@ -70,23 +70,23 @@ select count(*) >= 0 as ok from pg_prepared_xacts; -- This is to record the prevailing planner enable_foo settings during -- a regression test run. select name, setting from pg_settings where name like 'enable%'; - name | setting -----------------------------+--------- - enable_bitmapscan | on - enable_gathermerge | on - enable_hashagg | on - enable_hashjoin | on - enable_indexonlyscan | on - enable_indexscan | on - enable_material | on - enable_mergejoin | on - enable_nestloop | on - enable_parallel_append | on - enable_parallel_hash | on - enable_partition_wise_join | off - enable_seqscan | on - enable_sort | on - enable_tidscan | on + name | setting +---------------------------+--------- + enable_bitmapscan | on + enable_gathermerge | on + enable_hashagg | on + enable_hashjoin | on + enable_indexonlyscan | on + enable_indexscan | on + enable_material | on + enable_mergejoin | on + enable_nestloop | on + enable_parallel_append | on + enable_parallel_hash | on + enable_partitionwise_join | off + enable_seqscan | on + enable_sort | on + enable_tidscan | on (15 rows) -- Test that the pg_timezone_names and pg_timezone_abbrevs views are diff --git a/src/test/regress/sql/partition_join.sql b/src/test/regress/sql/partition_join.sql index 55c5615d06c..4b2e7810601 100644 --- a/src/test/regress/sql/partition_join.sql +++ b/src/test/regress/sql/partition_join.sql @@ -1,10 +1,10 @@ -- -- PARTITION_JOIN --- Test partition-wise join between partitioned tables +-- Test partitionwise join between partitioned tables -- --- Enable partition-wise join, which by default is disabled. -SET enable_partition_wise_join to true; +-- Enable partitionwise join, which by default is disabled. +SET enable_partitionwise_join to true; -- -- partitioned by a single column @@ -306,7 +306,7 @@ EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM (SELECT * FROM prt1_l WHERE prt1_l.b = 0) t1 FULL JOIN (SELECT * FROM prt2_l WHERE prt2_l.a = 0) t2 ON (t1.a = t2.b AND t1.c = t2.c) ORDER BY t1.a, t2.b; SELECT t1.a, t1.c, t2.b, t2.c FROM (SELECT * FROM prt1_l WHERE prt1_l.b = 0) t1 FULL JOIN (SELECT * FROM prt2_l WHERE prt2_l.a = 0) t2 ON (t1.a = t2.b AND t1.c = t2.c) ORDER BY t1.a, t2.b; --- lateral partition-wise join +-- lateral partitionwise join EXPLAIN (COSTS OFF) SELECT * FROM prt1_l t1 LEFT JOIN LATERAL (SELECT t2.a AS t2a, t2.c AS t2c, t2.b AS t2b, t3.b AS t3b, least(t1.a,t2.a,t3.b) FROM prt1_l t2 JOIN prt2_l t3 ON (t2.a = t3.b AND t2.c = t3.c)) ss @@ -348,39 +348,39 @@ CREATE TABLE prt4_n_p3 PARTITION OF prt4_n FOR VALUES FROM (500) TO (600); INSERT INTO prt4_n SELECT i, i, to_char(i, 'FM0000') FROM generate_series(0, 599, 2) i; ANALYZE prt4_n; --- partition-wise join can not be applied if the partition ranges differ +-- partitionwise join can not be applied if the partition ranges differ EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1 t1, prt4_n t2 WHERE t1.a = t2.a; EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1 t1, prt4_n t2, prt2 t3 WHERE t1.a = t2.a and t1.a = t3.b; --- partition-wise join can not be applied if there are no equi-join conditions +-- partitionwise join can not be applied if there are no equi-join conditions -- between partition keys EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1 t1 LEFT JOIN prt2 t2 ON (t1.a < t2.b); -- equi-join with join condition on partial keys does not qualify for --- partition-wise join +-- partitionwise join EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1_m t1, prt2_m t2 WHERE t1.a = (t2.b + t2.a)/2; -- equi-join between out-of-order partition key columns does not qualify for --- partition-wise join +-- partitionwise join EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1_m t1 LEFT JOIN prt2_m t2 ON t1.a = t2.b; --- equi-join between non-key columns does not qualify for partition-wise join +-- equi-join between non-key columns does not qualify for partitionwise join EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1_m t1 LEFT JOIN prt2_m t2 ON t1.c = t2.c; --- partition-wise join can not be applied between tables with different +-- partitionwise join can not be applied between tables with different -- partition lists EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1_n t1 LEFT JOIN prt2_n t2 ON (t1.c = t2.c); EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1_n t1 JOIN prt2_n t2 ON (t1.c = t2.c) JOIN plt1 t3 ON (t1.c = t3.c); --- partition-wise join can not be applied for a join between list and range +-- partitionwise join can not be applied for a join between list and range -- partitioned table EXPLAIN (COSTS OFF) SELECT t1.a, t1.c, t2.b, t2.c FROM prt1_n t1 FULL JOIN prt1 t2 ON (t1.c = t2.c); |