diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 0c11d5e55b34b23ae1179f53696b476be2c44e24..d4645e0bd68a45fc885980641c4d560f12cc19ea 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -7,7 +7,7 @@ * Portions Copyright (c) 1996-2008, PostgreSQL Global Development Group * Portions Copyright (c) 1994, Regents of the University of California * - * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.292.2.6 2009/05/07 11:25:28 heikki Exp $ + * $PostgreSQL: pgsql/src/backend/access/transam/xlog.c,v 1.292.2.7 2009/06/02 06:19:41 heikki Exp $ * *------------------------------------------------------------------------- */ @@ -2696,6 +2696,7 @@ RemoveOldXlogFiles(uint32 log, uint32 seg, XLogRecPtr endptr) struct dirent *xlde; char lastoff[MAXFNAMELEN]; char path[MAXPGPATH]; + struct stat statbuf; /* * Initialize info about where to try to recycle to. We allow recycling @@ -2736,11 +2737,13 @@ RemoveOldXlogFiles(uint32 log, uint32 seg, XLogRecPtr endptr) /* * Before deleting the file, see if it can be recycled as a - * future log segment. + * future log segment. Only recycle normal files, pg_standby + * for example can create symbolic links pointing to a + * separate archive directory. */ - if (InstallXLogFileSegment(&endlogId, &endlogSeg, path, - true, &max_advance, - true)) + if (lstat(path, &statbuf) == 0 && S_ISREG(statbuf.st_mode) && + InstallXLogFileSegment(&endlogId, &endlogSeg, path, + true, &max_advance, true)) { ereport(DEBUG2, (errmsg("recycled transaction log file \"%s\"",