git.postgresql.org Git - postgresql.git/commitdiff

git projects / postgresql.git / commitdiff
? search:
summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 4e7d10c)
Repair longstanding error in btree xlog replay: XLogReadBuffer should be
2006年3月28日 21:17:23 +0000 (21:17 +0000)
2006年3月28日 21:17:23 +0000 (21:17 +0000)
passed extend = true whenever we are reading a page we intend to reinitialize
completely, even if we think the page "should exist". This is because it
might indeed not exist, if the relation got truncated sometime after the
current xlog record was made and before the crash we're trying to recover
from. These two thinkos appear to explain both of the old bug reports
discussed here:
http://archives.postgresql.org/pgsql-hackers/2005-05/msg01369.php


diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c
index 2b5c8f73776e742d2dc694812926341000f4617a..a13a7366b0ca8dfaa3358dd29b53e4fb35a4d561 100644 (file)
--- a/src/backend/access/nbtree/nbtxlog.c
+++ b/src/backend/access/nbtree/nbtxlog.c
@@ -8,7 +8,7 @@
* Portions Copyright (c) 1994, Regents of the University of California
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.27 2006年03月24日 04:32:12 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.28 2006年03月28日 21:17:23 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -243,7 +243,7 @@ btree_xlog_split(bool onleft, bool isroot,
rightsib = (onleft) ? xlrec->otherblk : targetblk;
/* Left (original) sibling */
- buffer = XLogReadBuffer(false, reln, leftsib);
+ buffer = XLogReadBuffer(true, reln, leftsib);
if (!BufferIsValid(buffer))
elog(PANIC, "btree_split_redo: lost left sibling");
@@ -504,7 +504,7 @@ btree_xlog_delete_page(bool ismeta,
}
/* Rewrite target page as empty deleted page */
- buffer = XLogReadBuffer(false, reln, target);
+ buffer = XLogReadBuffer(true, reln, target);
if (!BufferIsValid(buffer))
elog(PANIC, "btree_delete_page_redo: lost target page");
page = (Page) BufferGetPage(buffer);
This is the main PostgreSQL git repository.
RSS Atom

AltStyle によって変換されたページ (->オリジナル) /