mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-12 18:34:36 +08:00
Try to exclude partitioned tables in toto.
Ashutosh Bapat, reviewed by Jeevan Chalke. Comment by me. Discussion: http://postgr.es/m/CAFjFpRcuRaydz88CY_aQekmuvmN2A9ax5z0k=ppT+s8KS8xMRA@mail.gmail.com
This commit is contained in:
parent
59c8078744
commit
1cbc17aaca
@ -1414,8 +1414,18 @@ relation_excluded_by_constraints(PlannerInfo *root,
|
||||
if (predicate_refuted_by(safe_restrictions, safe_restrictions, false))
|
||||
return true;
|
||||
|
||||
/* Only plain relations have constraints */
|
||||
if (rte->rtekind != RTE_RELATION || rte->inh)
|
||||
/*
|
||||
* Only plain relations have constraints. In a partitioning hierarchy,
|
||||
* but not with regular table inheritance, it's OK to assume that any
|
||||
* constraints that hold for the parent also hold for every child; for
|
||||
* instance, table inheritance allows the parent to have constraints
|
||||
* marked NO INHERIT, but table partitioning does not. We choose to check
|
||||
* whether the partitioning parents can be excluded here; doing so
|
||||
* consumes some cycles, but potentially saves us the work of excluding
|
||||
* each child individually.
|
||||
*/
|
||||
if (rte->rtekind != RTE_RELATION ||
|
||||
(rte->inh && rte->relkind != RELKIND_PARTITIONED_TABLE))
|
||||
return false;
|
||||
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user