From a2e8e15dd442e59deff2e96542b5281c14f63786 Mon Sep 17 00:00:00 2001
From: Tom Lane <tgl@sss.pgh.pa.us>
Date: Thu, 5 Dec 2002 22:48:03 +0000
Subject: [PATCH] localbuf.c must be able to do blind writes.

---
 src/backend/storage/buffer/localbuf.c | 29 ++++++++++++++++-----------
 1 file changed, 17 insertions(+), 12 deletions(-)

diff --git a/src/backend/storage/buffer/localbuf.c b/src/backend/storage/buffer/localbuf.c
index 5f4033b583e..29ec7902222 100644
--- a/src/backend/storage/buffer/localbuf.c
+++ b/src/backend/storage/buffer/localbuf.c
@@ -9,7 +9,7 @@
  *
  *
  * IDENTIFICATION
- *	  $Header: /cvsroot/pgsql/src/backend/storage/buffer/localbuf.c,v 1.46 2002/09/04 20:31:25 momjian Exp $
+ *	  $Header: /cvsroot/pgsql/src/backend/storage/buffer/localbuf.c,v 1.47 2002/12/05 22:48:03 tgl Exp $
  *
  *-------------------------------------------------------------------------
  */
@@ -90,19 +90,24 @@ LocalBufferAlloc(Relation reln, BlockNumber blockNum, bool *foundPtr)
 	{
 		Relation	bufrel = RelationNodeCacheGetRelation(bufHdr->tag.rnode);
 
-		/*
-		 * The relcache is not supposed to throw away temp rels, so this
-		 * should always succeed.
-		 */
-		Assert(bufrel != NULL);
-
 		/* flush this page */
-		smgrwrite(DEFAULT_SMGR, bufrel, bufHdr->tag.blockNum,
-				  (char *) MAKE_PTR(bufHdr->data));
-		LocalBufferFlushCount++;
+		if (bufrel == (Relation) NULL)
+		{
+			smgrblindwrt(DEFAULT_SMGR,
+						 bufHdr->tag.rnode,
+						 bufHdr->tag.blockNum,
+						 (char *) MAKE_PTR(bufHdr->data));
+		}
+		else
+		{
+			smgrwrite(DEFAULT_SMGR, bufrel,
+					  bufHdr->tag.blockNum,
+					  (char *) MAKE_PTR(bufHdr->data));
+			/* drop refcount incremented by RelationNodeCacheGetRelation */
+			RelationDecrementReferenceCount(bufrel);
+		}
 
-		/* drop refcount incremented by RelationNodeCacheGetRelation */
-		RelationDecrementReferenceCount(bufrel);
+		LocalBufferFlushCount++;
 	}
 
 	/*
-- 
GitLab