Commit 3fa9c416 authored by Peter Eisentraut's avatar Peter Eisentraut

Issue a warning if a change-on-restart-only postgresql.conf value is

modified  and the server config files are reloaded
parent bc6a824c
...@@ -83,7 +83,7 @@ Administration ...@@ -83,7 +83,7 @@ Administration
o %Allow postgresql.conf file values to be changed via an SQL o %Allow postgresql.conf file values to be changed via an SQL
API, perhaps using SET GLOBAL API, perhaps using SET GLOBAL
o Allow the server to be stopped/restarted via an SQL API o Allow the server to be stopped/restarted via an SQL API
o Issue a warning if a change-on-restart-only postgresql.conf value o -Issue a warning if a change-on-restart-only postgresql.conf value
is modified and the server config files are reloaded is modified and the server config files are reloaded
o Mark change-on-restart-only values in postgresql.conf o Mark change-on-restart-only values in postgresql.conf
......
...@@ -26,7 +26,7 @@ first. ...@@ -26,7 +26,7 @@ first.
<ul> <ul>
<li>%Remove behavior of postmaster -o <li>%Remove behavior of postmaster -o
</li><li>-*%Allow pooled connections to list all prepared statements* </li><li>-<em>%Allow pooled connections to list all prepared statements</em>
<p> This would allow an application inheriting a pooled connection to know <p> This would allow an application inheriting a pooled connection to know
the statements prepared in the current session. the statements prepared in the current session.
</p> </p>
...@@ -79,8 +79,8 @@ first. ...@@ -79,8 +79,8 @@ first.
</li><li>%Allow postgresql.conf file values to be changed via an SQL </li><li>%Allow postgresql.conf file values to be changed via an SQL
API, perhaps using SET GLOBAL API, perhaps using SET GLOBAL
</li><li>Allow the server to be stopped/restarted via an SQL API </li><li>Allow the server to be stopped/restarted via an SQL API
</li><li>Issue a warning if a change-on-restart-only postgresql.conf value </li><li>-<em>Issue a warning if a change-on-restart-only postgresql.conf value
is modified and the server config files are reloaded is modified and the server config files are reloaded</em>
</li><li>Mark change-on-restart-only values in postgresql.conf </li><li>Mark change-on-restart-only values in postgresql.conf
</li></ul> </li></ul>
</li><li>Tablespaces </li><li>Tablespaces
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* Written by Peter Eisentraut <peter_e@gmx.net>. * Written by Peter Eisentraut <peter_e@gmx.net>.
* *
* IDENTIFICATION * IDENTIFICATION
* $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.309 2006/01/09 10:05:31 petere Exp $ * $PostgreSQL: pgsql/src/backend/utils/misc/guc.c,v 1.310 2006/02/04 12:50:47 petere Exp $
* *
*-------------------------------------------------------------------- *--------------------------------------------------------------------
*/ */
...@@ -2201,6 +2201,7 @@ static void ReportGUCOption(struct config_generic * record); ...@@ -2201,6 +2201,7 @@ static void ReportGUCOption(struct config_generic * record);
static void ShowGUCConfigOption(const char *name, DestReceiver *dest); static void ShowGUCConfigOption(const char *name, DestReceiver *dest);
static void ShowAllGUCConfig(DestReceiver *dest); static void ShowAllGUCConfig(DestReceiver *dest);
static char *_ShowOption(struct config_generic * record); static char *_ShowOption(struct config_generic * record);
static bool is_newvalue_equal(struct config_generic *record, const char *newvalue);
/* /*
...@@ -3631,7 +3632,15 @@ set_config_option(const char *name, const char *value, ...@@ -3631,7 +3632,15 @@ set_config_option(const char *name, const char *value,
break; break;
case PGC_POSTMASTER: case PGC_POSTMASTER:
if (context == PGC_SIGHUP) if (context == PGC_SIGHUP)
{
if (changeVal && !is_newvalue_equal(record, value))
ereport(elevel,
(errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM),
errmsg("parameter \"%s\" cannot be changed after server start; configuration file change ignored",
name)));
return true; return true;
}
if (context != PGC_POSTMASTER) if (context != PGC_POSTMASTER)
{ {
ereport(elevel, ereport(elevel,
...@@ -5079,6 +5088,44 @@ _ShowOption(struct config_generic * record) ...@@ -5079,6 +5088,44 @@ _ShowOption(struct config_generic * record)
} }
static bool
is_newvalue_equal(struct config_generic *record, const char *newvalue)
{
switch (record->vartype)
{
case PGC_BOOL:
{
struct config_bool *conf = (struct config_bool *) record;
bool newval;
return parse_bool(newvalue, &newval) && *conf->variable == newval;
}
case PGC_INT:
{
struct config_int *conf = (struct config_int *) record;
int newval;
return parse_int(newvalue, &newval) && *conf->variable == newval;
}
case PGC_REAL:
{
struct config_real *conf = (struct config_real *) record;
double newval;
return parse_real(newvalue, &newval) && *conf->variable == newval;
}
case PGC_STRING:
{
struct config_string *conf = (struct config_string *) record;
return strcmp(*conf->variable, newvalue) == 0;
}
}
return false;
}
#ifdef EXEC_BACKEND #ifdef EXEC_BACKEND
/* /*
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment