postgres.git / summary / log / commit / refs

commit    c6f2f01611d4f2c412e92eb7893f76fa590818e8
Author:   Thomas Munro <tmunro@postgresql.org>
Date:     Tue Mar 15 00:38:41 2022 +0000
First released in: 15.0

    Fix pg_basebackup with in-place tablespaces.
    
    Previously, pg_basebackup from a cluster that contained an 'in-place'
    tablespace, as introduced by commit 7170f215, would produce a harmless
    warning on Unix and fail completely on Windows.
    
    Reported-by: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
    Reviewed-by: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
    Reviewed-by: Michael Paquier <michael@paquier.xyz>
    Discussion: https://postgr.es/m/20220304.165449.1200020258723305904.horikyota.ntt%40gmail.com


src/backend/access/transam/xlog.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/backend/access/transam/xlog.c b/src/backend/access/transam/xlog.c index 0d2bd7a3576..a22f7addacc 100644 --- a/src/backend/access/transam/xlog.c +++ b/src/backend/access/transam/xlog.c @@ -66,6 +66,7 @@ #include "catalog/pg_control.h" #include "catalog/pg_database.h" #include "common/controldata_utils.h" +#include "common/file_utils.h" #include "executor/instrument.h" #include "miscadmin.h" #include "pg_trace.h" @@ -8292,6 +8293,19 @@ do_pg_start_backup(const char *backupidstr, bool fast, TimeLineID *starttli_p, snprintf(fullpath, sizeof(fullpath), "pg_tblspc/%s", de->d_name); + /* + * Skip anything that isn't a symlink/junction. For testing only, + * we sometimes use allow_in_place_tablespaces to create + * directories directly under pg_tblspc, which would fail below. + */ +#ifdef WIN32 + if (!pgwin32_is_junction(fullpath)) + continue; +#else + if (get_dirent_type(fullpath, de, false, ERROR) != PGFILETYPE_LNK) + continue; +#endif + #if defined(HAVE_READLINK) || defined(WIN32) rllen = readlink(fullpath, linkpath, sizeof(linkpath)); if (rllen < 0) [parent: 9dde82899cdf]