summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Lane2007-07-20 16:29:59 +0000
committerTom Lane2007-07-20 16:29:59 +0000
commit85506ffbd51e15dffbd307e4d1060cfffb24c9e0 (patch)
tree5a543ec996874f02f61662d251e241aa1092a864
parent8208fb4b6305bfdd9b89faa6b70fc58b59338d53 (diff)
Fix WAL replay of truncate operations to cope with the possibility that the
truncated relation was deleted later in the WAL sequence. Since replay normally auto-creates a relation upon its first reference by a WAL log entry, failure is seen only if the truncate entry happens to be the first reference after the checkpoint we're restarting from; which is a pretty unusual case but of course not impossible. Fix by making truncate entries auto-create like the other ones do. Per report and test case from Dharmendra Goyal.
-rw-r--r--src/backend/storage/smgr/smgr.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/backend/storage/smgr/smgr.c b/src/backend/storage/smgr/smgr.c
index 3d4f5b5ccd8..8831edac701 100644
--- a/src/backend/storage/smgr/smgr.c
+++ b/src/backend/storage/smgr/smgr.c
@@ -11,7 +11,7 @@
*
*
* IDENTIFICATION
- * $PostgreSQL: pgsql/src/backend/storage/smgr/smgr.c,v 1.101.2.1 2007/07/08 22:23:25 tgl Exp $
+ * $PostgreSQL: pgsql/src/backend/storage/smgr/smgr.c,v 1.101.2.2 2007/07/20 16:29:59 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -912,6 +912,14 @@ smgr_redo(XLogRecPtr lsn, XLogRecord *record)
reln = smgropen(xlrec->rnode);
+ /*
+ * Forcibly create relation if it doesn't exist (which suggests that
+ * it was dropped somewhere later in the WAL sequence). As in
+ * XLogOpenRelation, we prefer to recreate the rel and replay the
+ * log as best we can until the drop is seen.
+ */
+ smgrcreate(reln, false, true);
+
/* Can't use smgrtruncate because it would try to xlog */
/*