mirror of
https://github.com/postgres/postgres.git
synced 2025-06-17 17:02:08 +03:00
On attach, consider skipping validation of subpartitions individually.
If the table attached as a partition is itself partitioned, individual partitions might have constraints strong enough to skip scanning the table even if the table actually attached does not. This is pretty cheap to check, and possibly a big win if it works out. Amit Langote, with test case changes by me. Discussion: http://postgr.es/m/1f08b844-0078-aa8d-452e-7af3bf77d05f@lab.ntt.co.jp
This commit is contained in:
@ -13683,6 +13683,21 @@ ValidatePartitionConstraints(List **wqueue, Relation scanrel,
|
||||
/* There can never be a whole-row reference here */
|
||||
if (found_whole_row)
|
||||
elog(ERROR, "unexpected whole-row reference found in partition key");
|
||||
|
||||
/* Can we skip scanning this part_rel? */
|
||||
if (PartConstraintImpliedByRelConstraint(part_rel, my_partconstr))
|
||||
{
|
||||
if (!validate_default)
|
||||
ereport(INFO,
|
||||
(errmsg("partition constraint for table \"%s\" is implied by existing constraints",
|
||||
RelationGetRelationName(part_rel))));
|
||||
else
|
||||
ereport(INFO,
|
||||
(errmsg("updated partition constraint for default partition \"%s\" is implied by existing constraints",
|
||||
RelationGetRelationName(part_rel))));
|
||||
heap_close(part_rel, NoLock);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
/* Grab a work queue entry. */
|
||||
|
Reference in New Issue
Block a user