aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2006-03-28 21:17:31 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2006-03-28 21:17:31 +0000
commit3c3ed28c75455ab18f5f7fb11262b9cb28c36f8c (patch)
tree1a8f187fe5c54dd870e31f1ed6e613658cd483cb
parentdf7b5f57346f263a735cddd0716445cfee83e5d1 (diff)
downloadpostgresql-3c3ed28c75455ab18f5f7fb11262b9cb28c36f8c.tar.gz
postgresql-3c3ed28c75455ab18f5f7fb11262b9cb28c36f8c.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
-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 ab2e9e92e76..57693e68902 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.24 2005/10/18 01:06:23 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/access/nbtree/nbtxlog.c,v 1.24.2.1 2006/03/28 21:17:31 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);