From 0b90794ed92f2116838bd9e25a18f18940782fe8 Mon Sep 17 00:00:00 2001 From: amit Date: Fri, 12 Oct 2018 19:12:53 +0900 Subject: [PATCH v20 4/4] Do not lock all partitions at the beginning --- src/backend/optimizer/util/inherit.c | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/backend/optimizer/util/inherit.c b/src/backend/optimizer/util/inherit.c index b014bb4633..b7e1b22e00 100644 --- a/src/backend/optimizer/util/inherit.c +++ b/src/backend/optimizer/util/inherit.c @@ -332,10 +332,6 @@ expand_nonpartitioned_inherited_rtentry(PlannerInfo *root, * * Partitions are added to the query in order in which they are found in * the parent's PartitionDesc. - * - * Note: even though only the unpruned partitions will be added to the - * resulting plan, this still locks *all* partitions via find_all_inheritors - * when this function is called for the root partitioned table. */ static void expand_partitioned_rtentry(PlannerInfo *root, RangeTblEntry *parentrte, @@ -349,10 +345,6 @@ expand_partitioned_rtentry(PlannerInfo *root, RangeTblEntry *parentrte, parentrel->inh_root_parent : parentRTindex; - /* If root partitioned table, lock *all* partitions in the tree. */ - if (parentRTindex == rootParentRTindex) - (void) find_all_inheritors(parentrte->relid, lockmode, NULL); - /* * Initialize partitioned_child_rels to contain this RT index. * @@ -389,8 +381,11 @@ expand_partitioned_rtentry(PlannerInfo *root, RangeTblEntry *parentrte, RangeTblEntry *childrte; Index childRTindex; - /* Open rel; we already have required locks */ - newrelation = table_open(childOID, NoLock); + /* + * Open rel; this's the first time of opening partitions for this + * query, so take the appropriate locks. + */ + newrelation = table_open(childOID, lockmode); Assert(!RELATION_IS_OTHER_TEMP(newrelation)); /* -- 2.11.0