diff --git a/src/backend/utils/adt/misc.c b/src/backend/utils/adt/misc.c index 4568749d23..1cd70a8eaa 100644 --- a/src/backend/utils/adt/misc.c +++ b/src/backend/utils/adt/misc.c @@ -15,6 +15,7 @@ #include "postgres.h" #include +#include #include #include #include @@ -306,6 +307,24 @@ pg_tablespace_location(PG_FUNCTION_ARGS) */ snprintf(sourcepath, sizeof(sourcepath), "pg_tblspc/%u", tablespaceOid); + /* Return empty string for in-place tablespaces. */ +#ifdef WIN32 + if (!pgwin32_is_junction(sourcepath)) + PG_RETURN_TEXT_P(cstring_to_text("")); +#else + { + struct stat stat_buf; + + if (lstat(sourcepath, &stat_buf) < 0) + ereport(ERROR, + (errcode_for_file_access(), + errmsg("could not stat file \"%s\": %m", + sourcepath))); + if (!S_ISLNK(stat_buf.st_mode)) + PG_RETURN_TEXT_P(cstring_to_text("")); + } +#endif + rllen = readlink(sourcepath, targetpath, sizeof(targetpath)); if (rllen < 0) ereport(ERROR,