1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-16 06:01:02 +03:00

Allow left join removals and unique joins on partitioned tables

This allows left join removals and unique joins to work with partitioned
tables.  The planner just lacked sufficient proofs that a given join
would not cause any row duplication.  Unique indexes currently serve as
that proof, so have get_relation_info() populate the indexlist for
partitioned tables too.

Author: Arne Roland
Reviewed-by: Alvaro Herrera, Zhihong Yu, Amit Langote, David Rowley
Discussion: https://postgr.es/m/c3b2408b7a39433b8230bbcd02e9f302@index.de
This commit is contained in:
David Rowley
2023-01-09 17:15:08 +13:00
parent 216a784829
commit 3c569049b7
7 changed files with 179 additions and 124 deletions

View File

@ -5994,6 +5994,10 @@ get_actual_variable_range(PlannerInfo *root, VariableStatData *vardata,
rte = root->simple_rte_array[rel->relid];
Assert(rte->rtekind == RTE_RELATION);
/* ignore partitioned tables. Any indexes here are not real indexes */
if (rte->relkind == RELKIND_PARTITIONED_TABLE)
return false;
/* Search through the indexes to see if any match our problem */
foreach(lc, rel->indexlist)
{