Обсуждение: closing heap relation
Hi,
I was looking at index_drop() in PG 11 branch.
In if (concurrent)block, the heap and index relations are overwritten since they were opened a few lines above the concurrent check.
Shouldn't the two relations be closed first ?
thanks
diff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 9d8f873944..625b72ae85 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -1641,6 +1641,9 @@ index_drop(Oid indexId, bool concurrent)
* conflicts with existing predicate locks, so now is the time to move
* them to the heap relation.
*/
+ heap_close(userHeapRelation, NoLock);
+ index_close(userIndexRelation, NoLock);
+
userHeapRelation = heap_open(heapId, ShareUpdateExclusiveLock);
userIndexRelation = index_open(indexId, ShareUpdateExclusiveLock);
TransferPredicateLocksToHeapRelation(userIndexRelation);
index 9d8f873944..625b72ae85 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -1641,6 +1641,9 @@ index_drop(Oid indexId, bool concurrent)
* conflicts with existing predicate locks, so now is the time to move
* them to the heap relation.
*/
+ heap_close(userHeapRelation, NoLock);
+ index_close(userIndexRelation, NoLock);
+
userHeapRelation = heap_open(heapId, ShareUpdateExclusiveLock);
userIndexRelation = index_open(indexId, ShareUpdateExclusiveLock);
TransferPredicateLocksToHeapRelation(userIndexRelation);
Hi,
On Tue, Jul 13, 2021 at 3:13 PM Zhihong Yu <zyu@yugabyte.com> wrote:
Hi,I was looking at index_drop() in PG 11 branch.In if (concurrent)block, the heap and index relations are overwritten since they were opened a few lines above the concurrent check.Shouldn't the two relations be closed first ?thanksdiff --git a/src/backend/catalog/index.c b/src/backend/catalog/index.c
index 9d8f873944..625b72ae85 100644
--- a/src/backend/catalog/index.c
+++ b/src/backend/catalog/index.c
@@ -1641,6 +1641,9 @@ index_drop(Oid indexId, bool concurrent)
* conflicts with existing predicate locks, so now is the time to move
* them to the heap relation.
*/
+ heap_close(userHeapRelation, NoLock);
+ index_close(userIndexRelation, NoLock);
+
userHeapRelation = heap_open(heapId, ShareUpdateExclusiveLock);
userIndexRelation = index_open(indexId, ShareUpdateExclusiveLock);
TransferPredicateLocksToHeapRelation(userIndexRelation);
Please disregard the above.
The relations were closed a bit earlier.