diff --git a/src/backend/access/gin/ginbtree.c b/src/backend/access/gin/ginbtree.c index b02cb8ae58f..3b241931bbc 100644 --- a/src/backend/access/gin/ginbtree.c +++ b/src/backend/access/gin/ginbtree.c @@ -179,13 +179,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 62b2f43ac94..dac0c459bed 100644 --- a/src/backend/access/gin/gindatapage.c +++ b/src/backend/access/gin/gindatapage.c @@ -237,6 +237,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 ed4ecfd0b13..729e3bac8f2 100644 --- a/src/backend/access/gin/ginvacuum.c +++ b/src/backend/access/gin/ginvacuum.c @@ -179,7 +179,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 b86990f3ac7..938ad7d1aad 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.