Hello,

I noticed by the following report, PostgreSQL can share the same
directory as tablespaces of two servers with different
pg-versions.

https://www.postgresql.org/message-id/2008148.rxBNyNRHPZ@peanuts2

8.4 checked that the tablespace location is empty, but from 9.0,
the check is replaced with creating a PG_PGVER_CATVER
subdirectory. This works for multiple servers with the same
version, but don't for servers with different versions.

This is apparently a bug but doesn't cause any other problem
immediately. If we choose not to do this, the documentaion needs
to be edited instead.

https://www.postgresql.org/docs/9.6/static/manage-ag-tablespaces.html

| The location must be an existing, empty directory that is owned
| by the PostgreSQL operating system user.

regards,

- 
Kyotaro Horiguchi
NTT Open Source Software Center
diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c
index f9c2620..6a89be1 100644
--- a/src/backend/commands/tablespace.c
+++ b/src/backend/commands/tablespace.c
@@ -606,23 +606,21 @@ create_tablespace_directories(const char *location, const Oid tablespaceoid)
 		}
 	}
 
+	
 	/*
-	 * The creation of the version directory prevents more than one tablespace
-	 * in a single location.
+	 * Check the target directory is empty.
 	 */
+	if (!directory_is_empty(location))
+		ereport(ERROR,
+				(errcode(ERRCODE_OBJECT_IN_USE),
+				 errmsg("directory \"%s\" is not empty",
+						location)));
+
 	if (mkdir(location_with_version_dir, S_IRWXU) < 0)
-	{
-		if (errno == EEXIST)
-			ereport(ERROR,
-					(errcode(ERRCODE_OBJECT_IN_USE),
-					 errmsg("directory \"%s\" already in use as a tablespace",
-							location_with_version_dir)));
-		else
-			ereport(ERROR,
-					(errcode_for_file_access(),
-					 errmsg("could not create directory \"%s\": %m",
-							location_with_version_dir)));
-	}
+		ereport(ERROR,
+				(errcode_for_file_access(),
+				 errmsg("could not create directory \"%s\": %m",
+						location_with_version_dir)));
 
 	/*
 	 * In recovery, remove old symlink, in case it points to the wrong place.
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to