From 3fa9c416ed14f1d46567fdcf99c8d639034dbeec Mon Sep 17 00:00:00 2001 From: Peter Eisentraut <peter_e@gmx.net> Date: Sat, 4 Feb 2006 12:50:47 +0000 Subject: [PATCH] Issue a warning if a change-on-restart-only postgresql.conf value is modified and the server config files are reloaded --- doc/TODO | 2 +- doc/src/FAQ/TODO.html | 6 ++--- src/backend/utils/misc/guc.c | 49 +++++++++++++++++++++++++++++++++++- 3 files changed, 52 insertions(+), 5 deletions(-) diff --git a/doc/TODO b/doc/TODO index d7e210651fc..b38a717f1e2 100644 --- a/doc/TODO +++ b/doc/TODO @@ -83,7 +83,7 @@ Administration o %Allow postgresql.conf file values to be changed via an SQL API, perhaps using SET GLOBAL 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 o Mark change-on-restart-only values in postgresql.conf diff --git a/doc/src/FAQ/TODO.html b/doc/src/FAQ/TODO.html index 9aafe3e9c30..d9d21ac4c74 100644 --- a/doc/src/FAQ/TODO.html +++ b/doc/src/FAQ/TODO.html @@ -26,7 +26,7 @@ first. <ul> <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 the statements prepared in the current session. </p> @@ -79,8 +79,8 @@ first. </li><li>%Allow postgresql.conf file values to be changed via an SQL API, perhaps using SET GLOBAL </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 - is modified and the server config files are reloaded + </li><li>-<em>Issue a warning if a change-on-restart-only postgresql.conf value + is modified and the server config files are reloaded</em> </li><li>Mark change-on-restart-only values in postgresql.conf </li></ul> </li><li>Tablespaces diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index e16bbd057b3..6ff6382a482 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -10,7 +10,7 @@ * Written by Peter Eisentraut <peter_e@gmx.net>. * * 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); static void ShowGUCConfigOption(const char *name, DestReceiver *dest); static void ShowAllGUCConfig(DestReceiver *dest); 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, break; case PGC_POSTMASTER: 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; + } if (context != PGC_POSTMASTER) { ereport(elevel, @@ -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 /* -- GitLab