diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 54a71b8f79..f9a49332ba 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2003, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.151 2004/07/22 20:18:40 tgl Exp $ + * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.152 2004/07/22 21:09:37 tgl Exp $ * *------------------------------------------------------------------------- */ @@ -4008,6 +4008,18 @@ StartupXLOG(void) /* Now we can determine the list of expected TLIs */ expectedTLIs = readTimeLineHistory(recoveryTargetTLI); + /* + * If pg_control's timeline is not in expectedTLIs, then we cannot + * proceed: the backup is not part of the history of the requested + * timeline. + */ + if (!list_member_int(expectedTLIs, + (int) ControlFile->checkPointCopy.ThisTimeLineID)) + ereport(FATAL, + (errmsg("requested timeline %u is not a child of database system timeline %u", + recoveryTargetTLI, + ControlFile->checkPointCopy.ThisTimeLineID))); + /* * Get the last valid checkpoint record. If the latest one according * to pg_control is broken, try the next-to-last one.