On 08/31/2018 04:59 PM, Tom Lane wrote:

Maksim Milyutin <milyuti...@gmail.com> writes:
30.08.2018 19:52, Peter Eisentraut wrote:
I think the hint is backwards.  When you don't have permission to chmod
the tablespace directory, you probably want to fix the permissions on
the tablespace directory or its parent.
In this case I propose to:
- replace my initial hint message to the guess what to do if errno ==
EPERM, smth like "You might need to install the PostgreSQL system user
as the owner of this directory";
- add another hint if errno == EACCES: "Fix permissions on the parent
directories".
I agree with what I think Peter is saying: the hint should just recommend
fixing permissions on the directory, for either errno code.  The more
detail you try to give, the more likely the hint will be wrong
... especially when you're dealing with errno codes that aren't all that
well standardized, as these aren't.

OK. However I think it would be helpful to leave the mention about setting necessary owner for tablespace directory. My final version of hint is "You might need to fix permissions on this directory or its parents or install the PostgreSQL system user as the owner of this directory." And updated version of patch is attached.

--
Regards, Maksim Milyutin

diff --git a/src/backend/commands/tablespace.c b/src/backend/commands/tablespace.c
index f7e9160..1478462 100644
--- a/src/backend/commands/tablespace.c
+++ b/src/backend/commands/tablespace.c
@@ -585,10 +585,15 @@ create_tablespace_directories(const char *location, const Oid tablespaceoid)
 					 InRecovery ? errhint("Create this directory for the tablespace before "
 										  "restarting the server.") : 0));
 		else
+		{
 			ereport(ERROR,
 					(errcode_for_file_access(),
 					 errmsg("could not set permissions on directory \"%s\": %m",
-							location)));
+							location),
+					 errhint("You might need to fix permissions on this "
+							 "directory or its parents or install the PostgreSQL "
+							 "system user as the owner of this directory.")));
+		}
 	}
 
 	if (InRecovery)

Reply via email to