aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/TODO2
-rw-r--r--doc/src/FAQ/TODO.html6
-rw-r--r--src/backend/utils/misc/guc.c49
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
/*