use_real_lsn_as_fake_lsn.patch

text/x-patch

Filename: use_real_lsn_as_fake_lsn.patch
Type: text/x-patch
Part: 0
Message: Re: [HACKERS] WAL logging problem in 9.4.3?

Patch

Format: unified
File+
src/backend/access/gist/gistutil.c 10 2
diff --git a/src/backend/access/gist/gistutil.c b/src/backend/access/gist/gistutil.c
index 66c52d6dd6..387b1f7d18 100644
--- a/src/backend/access/gist/gistutil.c
+++ b/src/backend/access/gist/gistutil.c
@@ -1017,8 +1017,7 @@ gistGetFakeLSN(Relation rel)
 	 * XXX before commit fix this.  This is not correct for
 	 * RELPERSISTENCE_PERMANENT, but it suffices to make tests pass.
 	 */
-	if (rel->rd_rel->relpersistence == RELPERSISTENCE_TEMP
-		|| rel->rd_rel->relpersistence == RELPERSISTENCE_PERMANENT)
+	if (rel->rd_rel->relpersistence == RELPERSISTENCE_TEMP)
 	{
 		/*
 		 * Temporary relations are only accessible in our session, so a simple
@@ -1026,6 +1025,15 @@ gistGetFakeLSN(Relation rel)
 		 */
 		return counter++;
 	}
+	else if (rel->rd_rel->relpersistence == RELPERSISTENCE_PERMANENT)
+	{
+		/*
+		 * Even though we are skipping WAL-logging of a permanent relations,
+		 * the LSN must be a real one because WAL-logging starts after commit.
+		 */
+		Assert(!RelationNeedsWAL(rel));
+		return GetXLogInsertRecPtr();
+	}
 	else
 	{
 		/*