mirror of
https://github.com/postgres/postgres.git
synced 2025-12-19 17:02:53 +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:
@@ -653,7 +653,7 @@ typedef struct PartitionSchemeData *PartitionScheme;
|
||||
* lateral_referencers - relids of rels that reference this one laterally
|
||||
* (includes both direct and indirect lateral references)
|
||||
* indexlist - list of IndexOptInfo nodes for relation's indexes
|
||||
* (always NIL if it's not a table)
|
||||
* (always NIL if it's not a table or partitioned table)
|
||||
* pages - number of disk pages in relation (zero if not a table)
|
||||
* tuples - number of tuples in relation (not considering restrictions)
|
||||
* allvisfrac - fraction of disk pages that are marked all-visible
|
||||
@@ -1097,11 +1097,11 @@ struct IndexOptInfo
|
||||
Oid *opfamily pg_node_attr(array_size(nkeycolumns));
|
||||
/* OIDs of opclass declared input data types */
|
||||
Oid *opcintype pg_node_attr(array_size(nkeycolumns));
|
||||
/* OIDs of btree opfamilies, if orderable */
|
||||
/* OIDs of btree opfamilies, if orderable. NULL if partitioned index */
|
||||
Oid *sortopfamily pg_node_attr(array_size(nkeycolumns));
|
||||
/* is sort order descending? */
|
||||
/* is sort order descending? or NULL if partitioned index */
|
||||
bool *reverse_sort pg_node_attr(array_size(nkeycolumns));
|
||||
/* do NULLs come first in the sort order? */
|
||||
/* do NULLs come first in the sort order? or NULL if partitioned index */
|
||||
bool *nulls_first pg_node_attr(array_size(nkeycolumns));
|
||||
/* opclass-specific options for columns */
|
||||
bytea **opclassoptions pg_node_attr(read_write_ignore);
|
||||
@@ -1139,7 +1139,7 @@ struct IndexOptInfo
|
||||
|
||||
/*
|
||||
* Remaining fields are copied from the index AM's API struct
|
||||
* (IndexAmRoutine).
|
||||
* (IndexAmRoutine). These fields are not set for partitioned indexes.
|
||||
*/
|
||||
bool amcanorderbyop;
|
||||
bool amoptionalkey;
|
||||
|
||||
Reference in New Issue
Block a user