aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2006-03-28 21:17:44 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2006-03-28 21:17:44 +0000
commitb5c5c5d2838d2a9e80e58000138c50ed0aa0eff0 (patch)
tree35eb25de5c7a007c4c9bb80305db6b81f3249e24 /src
parent8931dbf52af40e862fb649c4bb0d2c1b877a0320 (diff)
downloadpostgresql-b5c5c5d2838d2a9e80e58000138c50ed0aa0eff0.tar.gz
postgresql-b5c5c5d2838d2a9e80e58000138c50ed0aa0eff0.zip
Repair longstanding error in btree xlog replay: XLogReadBuffer should be
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
Diffstat (limited to 'src')
-rw-r--r--src/backend/access/nbtree/nbtxlog.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/backend/access/nbtree/nbtxlog.c b/src/backend/access/nbtree/nbtxlog.c
index 0bd2c418f03..e352c1de7ff 100644
--- 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.19 2004/12/31 21:59:22 pgsql Exp $
+ * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.19.4.1 2006/03/28 21:17:44 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -258,7 +258,7 @@ btree_xlog_split(bool redo, 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_%s: lost left sibling", op);
@@ -551,7 +551,7 @@ btree_xlog_delete_page(bool redo, 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_%s: lost target page", op);
page = (Page) BufferGetPage(buffer);