Improve error reporting when location specified by postgres -D does not exist
authorPeter Eisentraut <[email protected]>
Tue, 17 Nov 2015 11:47:18 +0000 (06:47 -0500)
committerPeter Eisentraut <[email protected]>
Wed, 3 Feb 2016 02:03:19 +0000 (21:03 -0500)
Previously, the first error seen would be that postgresql.conf does not
exist.  But for the case where the whole directory does not exist, give
an error message about that, together with a hint for how to create one.

src/backend/utils/misc/guc.c

index 38ba82fe4b66fab912f1cf2a6226fb1726d54911..b8d34b59f58552f7721cbda087f475e204027d2a 100644 (file)
@@ -4463,6 +4463,17 @@ SelectConfigFiles(const char *userDoption, const char *progname)
    else
        configdir = make_absolute_path(getenv("PGDATA"));
 
+   if (configdir && stat(configdir, &stat_buf) != 0)
+   {
+       write_stderr("%s: could not access \"%s\": %s\n",
+                    progname,
+                    configdir,
+                    strerror(errno));
+       if (errno == ENOENT)
+           write_stderr("Run initdb or pg_basebackup to initialize a PostgreSQL data directory.\n");
+       return false;
+   }
+
    /*
     * Find the configuration file: if config_file was specified on the
     * command line, use it, else use configdir/postgresql.conf.  In any case
@@ -4498,7 +4509,7 @@ SelectConfigFiles(const char *userDoption, const char *progname)
     */
    if (stat(ConfigFileName, &stat_buf) != 0)
    {
-       write_stderr("%s cannot access the server configuration file \"%s\": %s\n",
+       write_stderr("%s: could not access the server configuration file \"%s\": %s\n",
                     progname, ConfigFileName, strerror(errno));
        free(configdir);
        return false;