fix-buffer-pinning-error-in-gin-page-split.patch

text/x-diff

Filename: fix-buffer-pinning-error-in-gin-page-split.patch
Type: text/x-diff
Part: 0
Message: Re: Bug with GIN index over JSONB data: "ERROR: buffer 10112 is not owned by resource owner"

Patch

Same data as JSON: GET /api/v1/attachments/:id/patch the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes. API reference →
Format: unified
File+
src/backend/access/gin/ginbtree.c 5 1
diff --git a/src/backend/access/gin/ginbtree.c b/src/backend/access/gin/ginbtree.c
index fc694b40f1..2dd3853e70 100644
--- a/src/backend/access/gin/ginbtree.c
+++ b/src/backend/access/gin/ginbtree.c
@@ -272,7 +272,11 @@ ginFindParents(GinBtree btree, GinBtreeStack *stack)
 			blkno = GinPageGetOpaque(page)->rightlink;
 			if (blkno == InvalidBlockNumber)
 			{
-				UnlockReleaseBuffer(buffer);
+				/* Do not release pin on the root buffer */
+				if (buffer != root->buffer)
+					UnlockReleaseBuffer(buffer);
+				else
+					LockBuffer(buffer, GIN_UNLOCK);
 				break;
 			}
 			buffer = ginStepRight(buffer, btree->index, GIN_EXCLUSIVE);