diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2014-05-11 15:13:30 -0400 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2014-05-11 15:13:30 -0400 |
commit | 195e81aff5d63da1e1f9dd0314a13859ec15c7c0 (patch) | |
tree | f86798f710ea33894e3acf76e22bf4220c223142 /src/backend/utils/misc/guc.c | |
parent | 12e611d43e6efbf0e36014a3055ed47366facee7 (diff) | |
download | postgresql-195e81aff5d63da1e1f9dd0314a13859ec15c7c0.tar.gz postgresql-195e81aff5d63da1e1f9dd0314a13859ec15c7c0.zip |
Find postgresql.auto.conf in PGDATA even when postgresql.conf is elsewhere.
The original coding for ALTER SYSTEM made a fundamentally bogus assumption
that postgresql.auto.conf could be sought relative to the main config file
if we hadn't yet determined the value of data_directory. This fails for
common arrangements with the config file elsewhere, as reported by
Christoph Berg.
The simplest fix is to not try to read postgresql.auto.conf until after
SelectConfigFiles has chosen (and locked down) the data_directory setting.
Because of the logic in ProcessConfigFile for handling resetting of GUCs
that've been removed from the config file, we cannot easily read the main
and auto config files separately; so this patch adopts a brute force
approach of reading the main config file twice during postmaster startup.
That's a tad ugly, but the actual time cost is likely to be negligible,
and there's no time for a more invasive redesign before beta.
With this patch, any attempt to set data_directory via ALTER SYSTEM
will be silently ignored. It would probably be better to throw an
error, but that can be dealt with later. This bug, however, would
prevent any testing of ALTER SYSTEM by a significant fraction of the
userbase, so it seems important to get it fixed before beta.
Diffstat (limited to 'src/backend/utils/misc/guc.c')
-rw-r--r-- | src/backend/utils/misc/guc.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index ddd333fea40..fdd5b638cd6 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -4364,6 +4364,14 @@ SelectConfigFiles(const char *userDoption, const char *progname) SetConfigOption("data_directory", DataDir, PGC_POSTMASTER, PGC_S_OVERRIDE); /* + * Now read the config file a second time, allowing any settings in + * the PG_AUTOCONF_FILENAME file to take effect. (This is pretty ugly, + * but since we have to determine the DataDir before we can find the + * autoconf file, the alternatives seem worse.) + */ + ProcessConfigFile(PGC_POSTMASTER); + + /* * If timezone_abbreviations wasn't set in the configuration file, install * the default value. We do it this way because we can't safely install a * "real" value until my_exec_path is set, which may not have happened |