v14-0006-Do-not-lock-all-partitions-at-the-beginning.patch

text/plain

Filename: v14-0006-Do-not-lock-all-partitions-at-the-beginning.patch
Type: text/plain
Part: 5
Message: Re: speeding up planning with partitions

Patch

Format: format-patch
Series: patch v14-0006
Subject: Do not lock all partitions at the beginning
File+
src/backend/optimizer/util/inherit.c 1 10
From 9fff3f615968d365fc96ffcd2debbbf590bd6386 Mon Sep 17 00:00:00 2001
From: amit <amitlangote09@gmail.com>
Date: Fri, 12 Oct 2018 19:12:53 +0900
Subject: [PATCH v14 6/6] Do not lock all partitions at the beginning

---
 src/backend/optimizer/util/inherit.c | 11 +----------
 1 file changed, 1 insertion(+), 10 deletions(-)

diff --git a/src/backend/optimizer/util/inherit.c b/src/backend/optimizer/util/inherit.c
index 776d02c81a..d88b9a7cb7 100644
--- a/src/backend/optimizer/util/inherit.c
+++ b/src/backend/optimizer/util/inherit.c
@@ -327,10 +327,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,
@@ -344,10 +340,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.
 	 *
@@ -383,8 +375,7 @@ expand_partitioned_rtentry(PlannerInfo *root, RangeTblEntry *parentrte,
 		RangeTblEntry *childrte;
 		Index		childRTindex;
 
-		/* Already locked above. */
-		newrelation = heap_open(childOID, NoLock);
+		newrelation = heap_open(childOID, lockmode);
 		Assert(!RELATION_IS_OTHER_TEMP(newrelation));
 
 		/*
-- 
2.11.0