]> granicus.if.org Git - postgresql/blobdiff - src/backend/storage/buffer/localbuf.c
localbuf.c must be able to do blind writes.
[postgresql] / src / backend / storage / buffer / localbuf.c
index 5f4033b583e088738c7f1356cd1b6e2e37722f66..29ec790222295aeb438c324214c01c2196a3575b 100644 (file)
@@ -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++;
        }
 
        /*