From 4ee5c40b06f098910ed0fc5fd72fb2744776ccbb Mon Sep 17 00:00:00 2001
From: Alvaro Herrera <alvherre@alvh.no-ip.org>
Date: Wed, 7 Nov 2012 16:23:39 -0300
Subject: [PATCH] Don't try to use a unopened relation

Commit 4c9d0901 mistakenly introduced a call to
TransferPredicateLocksToHeapRelation() on an index relation that had
been closed a few lines above.  Moving up an index_open() call that's
below is enough to fix the problem.

Discovered by me while testing an unrelated patch.
---
 src/backend/catalog/index.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 756f6d918b0..d2d91c1b786 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -1475,6 +1475,8 @@ index_drop(Oid indexId, bool concurrent)
 		 * conflicts with existing predicate locks, so now is the time to move
 		 * them to the heap relation.
 		 */
+		userHeapRelation = heap_open(heapId, ShareUpdateExclusiveLock);
+		userIndexRelation = index_open(indexId, ShareUpdateExclusiveLock);
 		TransferPredicateLocksToHeapRelation(userIndexRelation);
 
 		/*
@@ -1484,9 +1486,6 @@ index_drop(Oid indexId, bool concurrent)
 		 */
 		indexRelation = heap_open(IndexRelationId, RowExclusiveLock);
 
-		userHeapRelation = heap_open(heapId, ShareUpdateExclusiveLock);
-		userIndexRelation = index_open(indexId, ShareUpdateExclusiveLock);
-
 		tuple = SearchSysCacheCopy1(INDEXRELID,
 									ObjectIdGetDatum(indexId));
 		if (!HeapTupleIsValid(tuple))
-- 
GitLab