Allow commenting of variables in postgresql.conf to restore them to defaults

From: Zdenek Kotala <Zdenek(dot)Kotala(at)Sun(dot)COM>
To: pgsql-patches(at)postgresql(dot)org
Cc: Joachim Wieland <joe(at)mcknight(dot)de>
Subject: Allow commenting of variables in postgresql.conf to restore them to defaults
Date: 2006-05-24 13:28:26
Message-ID: 44745F7A.6030203@sun.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers pgsql-patches

There is path implements following item from todo list: "Allow
commenting of variables in postgresql.conf to restore them to defaults".
Main idea is:

General config structure is extend with default_val attribute to keep
really default value. (There is small conflict - for string boot_val has same meaning).
During reconfiguration all values which has reset source equal with
PGC_S_FILE are revert back to really default values. New values from
configuration files are set after this step and commented variables stay
with default value.

Zdenek

Index: src/backend/utils/misc/guc-file.l

===================================================================

RCS file: /projects/cvsroot/pgsql/src/backend/utils/misc/guc-file.l,v

retrieving revision 1.37

diff -r1.37 guc-file.l

115c115

< int elevel;

---

> int elevel, i;

116a117

> char *env;

145a147,182

> /* Revert all options with reset source PGC_S_FILE to default value.

> * This implementation is easier then implementing some change flag and verify

> * what really was commented out.

> * XXX When log_line_prefix is set in configuration file then log output

> * is not correct during this phase - prefix is revert to empty value.

> */

> for (i = 0; i < num_guc_variables; i++)

> {

> struct config_generic *gconf = guc_variables[i];

> if ( gconf->reset_source == PGC_S_FILE )

> {

> set_config_option(gconf->name, NULL, context,

> PGC_S_FILE, false, true);

> }

> }

>

> /* Revert to environment variable. PGPORT is ignored, because it cannot be

> * set in running state. PGC_S_FILE is used instead PGC_S_ENV so as

> * set_config_option can override previous defined option in config file.

> * If these options are still in config file They will be overridden in

> * the following step.

> */

> env = getenv("PGDATESTYLE");

> if (env != NULL)

> {

> set_config_option("datestyle", env, context,

> PGC_S_FILE, false, true);

> }

>

> env = getenv("PGCLIENTENCODING");

> if (env != NULL)

> {

> set_config_option("client_encoding", env, context,

> PGC_S_FILE, false, true);

> }

>

Index: src/backend/utils/misc/guc.c

===================================================================

RCS file: /projects/cvsroot/pgsql/src/backend/utils/misc/guc.c,v

retrieving revision 1.319

diff -r1.319 guc.c

2651c2651

< if (!(*conf->assign_hook) (conf->reset_val, true,

---

> if (!(*conf->assign_hook) (conf->default_val, true,

2654,2655c2654,2655

< conf->gen.name, (int) conf->reset_val);

< *conf->variable = conf->reset_val;

---

> conf->gen.name, (int) conf->default_val);

> *conf->variable = conf->reset_val = conf->default_val;

2665c2665

< if (!(*conf->assign_hook) (conf->reset_val, true,

---

> if (!(*conf->assign_hook) (conf->default_val, true,

2668,2669c2668,2669

< conf->gen.name, conf->reset_val);

< *conf->variable = conf->reset_val;

---

> conf->gen.name, conf->default_val);

> *conf->variable = conf->reset_val = conf->default_val;

2679c2679

< if (!(*conf->assign_hook) (conf->reset_val, true,

---

> if (!(*conf->assign_hook) (conf->default_val, true,

2682,2683c2682,2683

< conf->gen.name, conf->reset_val);

< *conf->variable = conf->reset_val;

---

> conf->gen.name, conf->default_val);

> *conf->variable = conf->reset_val = conf->default_val;

3650c3650

< if (changeVal && !is_newvalue_equal(record, value))

---

> if (changeVal && value != NULL && !is_newvalue_equal(record, value))

3726c3726

< makeDefault = changeVal && (source <= PGC_S_OVERRIDE) && (value != NULL);

---

> makeDefault = changeVal && (source <= PGC_S_OVERRIDE) && (value != NULL || source == PGC_S_FILE);

3769,3770c3769,3781

< newval = conf->reset_val;

< source = conf->gen.reset_source;

---

> /* Revert value to default if source is configuration file. It is used when

> * configuration parameter is removed/commented out in the config file. Else

> * RESET or SET TO DEFAULT command is called and reset_val is used.

> */

> if( source == PGC_S_FILE )

> {

> newval = conf->default_val;

> }

> else

> {

> newval = conf->reset_val;

> source = conf->gen.reset_source;

> }

3853,3854c3864,3876

< newval = conf->reset_val;

< source = conf->gen.reset_source;

---

> /* Revert value to default if source is configuration file. It is used when

> * configuration parameter is removed/commented out in the config file. Else

> * RESET or SET TO DEFAULT command is called and reset_val is used.

> */

> if( source == PGC_S_FILE )

> {

> newval = conf->default_val;

> }

> else

> {

> newval = conf->reset_val;

> source = conf->gen.reset_source;

> }

3937,3938c3959,3971

< newval = conf->reset_val;

< source = conf->gen.reset_source;

---

> /* Revert value to default if source is configuration file. It is used when

> * configuration parameter is removed/commented out in the config file. Else

> * RESET or SET TO DEFAULT command is called and reset_val is used.

> */

> if( source == PGC_S_FILE )

> {

> newval = conf->default_val;

> }

> else

> {

> newval = conf->reset_val;

> source = conf->gen.reset_source;

> }

4011a4045,4058

> else if (source == PGC_S_FILE)

> {

> /* Revert value to default when item is removed from config file. */

> if ( conf->boot_val != NULL )

> {

> newval = guc_strdup(elevel, conf->boot_val);

> if (newval == NULL)

> return false;

> }

> else

> {

> return false;

> }

> }

5113a5161,5165

> if( !newvalue )

> {

> return false;

> }

>

Index: src/include/utils/guc_tables.h

===================================================================

RCS file: /projects/cvsroot/pgsql/src/include/utils/guc_tables.h,v

retrieving revision 1.22

diff -r1.22 guc_tables.h

145c145

< bool reset_val;

---

> bool default_val;

149a150

> bool reset_val;

158c159

< int reset_val;

---

> int default_val;

164a166

> int reset_val;

173c175

< double reset_val;

---

> double default_val;

179a182,183

> double reset_val;

>

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2006-05-24 13:40:27 Re: error-free disabling of individual child partition
Previous Message Simon Riggs 2006-05-24 13:16:03 Re: error-free disabling of individual child partition

Browse pgsql-patches by date

  From Date Subject
Next Message Andrew Dunstan 2006-05-24 14:01:45 Re: Allow commenting of variables in postgresql.conf to
Previous Message Adam Sjøgren 2006-05-24 08:25:07 plperl - put schema-name in $_TD