mirror of
https://github.com/postgres/postgres.git
synced 2025-07-28 23:42:10 +03:00
Don't allow data_directory to be set in postgresql.auto.conf by ALTER SYSTEM.
data_directory could be set both in postgresql.conf and postgresql.auto.conf so far. This could cause some problematic situations like circular definition. To avoid such situations, this commit forbids a user to set data_directory in postgresql.auto.conf. Backpatch this to 9.4 where ALTER SYSTEM command was introduced. Amit Kapila, reviewed by Abhijit Menon-Sen, with minor adjustments by me.
This commit is contained in:
@ -76,6 +76,16 @@ ALTER SYSTEM SET <replaceable class="PARAMETER">configuration_parameter</replace
|
|||||||
</variablelist>
|
</variablelist>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Notes</title>
|
||||||
|
|
||||||
|
<para>
|
||||||
|
This command can't be used to set <xref linkend="guc-data-directory">
|
||||||
|
and any parameters (e.g., <link linkend="runtime-config-preset">preset options</>)
|
||||||
|
that are not allowed in <filename>postgresql.conf</>.
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
<title>Examples</title>
|
<title>Examples</title>
|
||||||
|
|
||||||
|
@ -3095,10 +3095,14 @@ static struct config_string ConfigureNamesString[] =
|
|||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
|
/*
|
||||||
|
* Can't be set by ALTER SYSTEM as it can lead to recursive definition
|
||||||
|
* of data_directory.
|
||||||
|
*/
|
||||||
{"data_directory", PGC_POSTMASTER, FILE_LOCATIONS,
|
{"data_directory", PGC_POSTMASTER, FILE_LOCATIONS,
|
||||||
gettext_noop("Sets the server's data directory."),
|
gettext_noop("Sets the server's data directory."),
|
||||||
NULL,
|
NULL,
|
||||||
GUC_SUPERUSER_ONLY
|
GUC_SUPERUSER_ONLY | GUC_DISALLOW_IN_AUTO_FILE
|
||||||
},
|
},
|
||||||
&data_directory,
|
&data_directory,
|
||||||
NULL,
|
NULL,
|
||||||
@ -6735,12 +6739,17 @@ AlterSystemSetConfigFile(AlterSystemStmt *altersysstmt)
|
|||||||
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
(errcode(ERRCODE_UNDEFINED_OBJECT),
|
||||||
errmsg("unrecognized configuration parameter \"%s\"", name)));
|
errmsg("unrecognized configuration parameter \"%s\"", name)));
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Don't allow the parameters which can't be set in configuration
|
||||||
|
* files to be set in PG_AUTOCONF_FILENAME file.
|
||||||
|
*/
|
||||||
if ((record->context == PGC_INTERNAL) ||
|
if ((record->context == PGC_INTERNAL) ||
|
||||||
(record->flags & GUC_DISALLOW_IN_FILE))
|
(record->flags & GUC_DISALLOW_IN_FILE) ||
|
||||||
ereport(ERROR,
|
(record->flags & GUC_DISALLOW_IN_AUTO_FILE))
|
||||||
(errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM),
|
ereport(ERROR,
|
||||||
errmsg("parameter \"%s\" cannot be changed",
|
(errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM),
|
||||||
name)));
|
errmsg("parameter \"%s\" cannot be changed",
|
||||||
|
name)));
|
||||||
|
|
||||||
if (!validate_conf_option(record, name, value, PGC_S_FILE,
|
if (!validate_conf_option(record, name, value, PGC_S_FILE,
|
||||||
ERROR, true, NULL,
|
ERROR, true, NULL,
|
||||||
|
@ -195,6 +195,7 @@ typedef enum
|
|||||||
#define GUC_UNIT_TIME 0x7000 /* mask for MS, S, MIN */
|
#define GUC_UNIT_TIME 0x7000 /* mask for MS, S, MIN */
|
||||||
|
|
||||||
#define GUC_NOT_WHILE_SEC_REST 0x8000 /* can't set if security restricted */
|
#define GUC_NOT_WHILE_SEC_REST 0x8000 /* can't set if security restricted */
|
||||||
|
#define GUC_DISALLOW_IN_AUTO_FILE 0x00010000 /* can't set in PG_AUTOCONF_FILENAME */
|
||||||
|
|
||||||
/* GUC vars that are actually declared in guc.c, rather than elsewhere */
|
/* GUC vars that are actually declared in guc.c, rather than elsewhere */
|
||||||
extern bool log_duration;
|
extern bool log_duration;
|
||||||
|
Reference in New Issue
Block a user