diff --git a/src/backend/access/gin/ginbtree.c b/src/backend/access/gin/ginbtree.c index 78213dcb4e..ca49d795a0 100644 --- a/src/backend/access/gin/ginbtree.c +++ b/src/backend/access/gin/ginbtree.c @@ -187,13 +187,6 @@ ginStepRight(Buffer buffer, Relation index, int lockmode) if (isLeaf != GinPageIsLeaf(page) || isData != GinPageIsData(page)) elog(ERROR, "right sibling of GIN page is of different type"); - /* - * Given the proper lock sequence above, we should never land on a deleted - * page. - */ - if (GinPageIsDeleted(page)) - elog(ERROR, "right sibling of GIN page was deleted"); - return nextbuffer; } diff --git a/src/backend/access/gin/gindatapage.c b/src/backend/access/gin/gindatapage.c index 54d6890912..23751d5380 100644 --- a/src/backend/access/gin/gindatapage.c +++ b/src/backend/access/gin/gindatapage.c @@ -238,6 +238,9 @@ dataIsMoveRight(GinBtree btree, Page page) if (GinPageRightMost(page)) return false; + if (GinPageIsDeleted(page)) + return true; + return (ginCompareItemPointers(&btree->itemptr, iptr) > 0) ? true : false; } diff --git a/src/backend/access/gin/ginvacuum.c b/src/backend/access/gin/ginvacuum.c index f36f1a8242..120e75a71f 100644 --- a/src/backend/access/gin/ginvacuum.c +++ b/src/backend/access/gin/ginvacuum.c @@ -186,7 +186,7 @@ ginDeletePage(GinVacuumState *gvs, BlockNumber deleteBlkno, BlockNumber leftBlkn * we shouldn't change rightlink field to save workability of running * search scan */ - GinPageGetOpaque(page)->flags = GIN_DELETED; + GinPageSetDeleted(page); MarkBufferDirty(pBuffer); MarkBufferDirty(lBuffer); diff --git a/src/backend/access/gin/ginxlog.c b/src/backend/access/gin/ginxlog.c index f3c82ac836..55e0c442cb 100644 --- a/src/backend/access/gin/ginxlog.c +++ b/src/backend/access/gin/ginxlog.c @@ -530,7 +530,7 @@ ginRedoDeletePage(XLogReaderState *record) { page = BufferGetPage(dbuffer); Assert(GinPageIsData(page)); - GinPageGetOpaque(page)->flags = GIN_DELETED; + GinPageSetDeleted(page); /* * deleteXid field of ginxlogDeletePage was added during backpatching.