Re: Allow commenting of variables in postgresql.conf to
От | Zdenek Kotala |
---|---|
Тема | Re: Allow commenting of variables in postgresql.conf to |
Дата | |
Msg-id | 44746D35.6030000@sun.com обсуждение исходный текст |
Ответ на | Re: Allow commenting of variables in postgresql.conf to (Alvaro Herrera <alvherre@commandprompt.com>) |
Ответы |
Re: Allow commenting of variables in postgresql.conf to
|
Список | pgsql-patches |
Alvaro Herrera wrote: > Zdenek Kotala wrote: > >>> Zdenek Kotala wrote: >>> >>>> 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. >>>> >>>> >>> > > Please resubmit as an attachment, or disallow your mail client from > munging whitespace ... I see wrapped words here, and apparently tab > expansion as well. > > OK. Here is patch like attachment. 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 -c -r1.37 guc-file.l *** src/backend/utils/misc/guc-file.l 7 Mar 2006 01:03:12 -0000 1.37 --- src/backend/utils/misc/guc-file.l 24 May 2006 14:10:12 -0000 *************** *** 112,119 **** void ProcessConfigFile(GucContext context) { ! int elevel; struct name_value_pair *item, *head, *tail; Assert(context == PGC_POSTMASTER || context == PGC_SIGHUP); --- 112,120 ---- void ProcessConfigFile(GucContext context) { ! int elevel, i; struct name_value_pair *item, *head, *tail; + char *env; Assert(context == PGC_POSTMASTER || context == PGC_SIGHUP); *************** *** 143,148 **** --- 144,185 ---- goto cleanup_list; } + /* Revert all options with reset source PGC_S_FILE to default value. + * This implementation is easier then iplementing some change flag and verify + * what realy 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 overriden 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); + } + /* If we got here all the options checked out okay, so apply them. */ for (item = head; item; item = item->next) { Index: src/backend/utils/misc/guc.c =================================================================== RCS file: /projects/cvsroot/pgsql/src/backend/utils/misc/guc.c,v retrieving revision 1.319 diff -c -r1.319 guc.c *** src/backend/utils/misc/guc.c 11 May 2006 19:15:35 -0000 1.319 --- src/backend/utils/misc/guc.c 24 May 2006 14:10:12 -0000 *************** *** 2648,2658 **** struct config_bool *conf = (struct config_bool *) gconf; if (conf->assign_hook) ! if (!(*conf->assign_hook) (conf->reset_val, true, PGC_S_DEFAULT)) elog(FATAL, "failed to initialize %s to %d", ! conf->gen.name, (int) conf->reset_val); ! *conf->variable = conf->reset_val; break; } case PGC_INT: --- 2648,2658 ---- struct config_bool *conf = (struct config_bool *) gconf; if (conf->assign_hook) ! if (!(*conf->assign_hook) (conf->default_val, true, PGC_S_DEFAULT)) elog(FATAL, "failed to initialize %s to %d", ! conf->gen.name, (int) conf->default_val); ! *conf->variable = conf->reset_val = conf->default_val; break; } case PGC_INT: *************** *** 2662,2672 **** Assert(conf->reset_val >= conf->min); Assert(conf->reset_val <= conf->max); if (conf->assign_hook) ! if (!(*conf->assign_hook) (conf->reset_val, true, PGC_S_DEFAULT)) elog(FATAL, "failed to initialize %s to %d", ! conf->gen.name, conf->reset_val); ! *conf->variable = conf->reset_val; break; } case PGC_REAL: --- 2662,2672 ---- Assert(conf->reset_val >= conf->min); Assert(conf->reset_val <= conf->max); if (conf->assign_hook) ! if (!(*conf->assign_hook) (conf->default_val, true, PGC_S_DEFAULT)) elog(FATAL, "failed to initialize %s to %d", ! conf->gen.name, conf->default_val); ! *conf->variable = conf->reset_val = conf->default_val; break; } case PGC_REAL: *************** *** 2676,2686 **** Assert(conf->reset_val >= conf->min); Assert(conf->reset_val <= conf->max); if (conf->assign_hook) ! if (!(*conf->assign_hook) (conf->reset_val, true, PGC_S_DEFAULT)) elog(FATAL, "failed to initialize %s to %g", ! conf->gen.name, conf->reset_val); ! *conf->variable = conf->reset_val; break; } case PGC_STRING: --- 2676,2686 ---- Assert(conf->reset_val >= conf->min); Assert(conf->reset_val <= conf->max); if (conf->assign_hook) ! if (!(*conf->assign_hook) (conf->default_val, true, PGC_S_DEFAULT)) elog(FATAL, "failed to initialize %s to %g", ! conf->gen.name, conf->default_val); ! *conf->variable = conf->reset_val = conf->default_val; break; } case PGC_STRING: *************** *** 3647,3653 **** 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", --- 3647,3653 ---- case PGC_POSTMASTER: if (context == PGC_SIGHUP) { ! if (changeVal && value != NULL && !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", *************** *** 3723,3729 **** * Should we set reset/stacked values? (If so, the behavior is not * transactional.) */ ! makeDefault = changeVal && (source <= PGC_S_OVERRIDE) && (value != NULL); /* * Ignore attempted set if overridden by previously processed setting. --- 3723,3729 ---- * Should we set reset/stacked values? (If so, the behavior is not * transactional.) */ ! makeDefault = changeVal && (source <= PGC_S_OVERRIDE) && (value != NULL || source == PGC_S_FILE); /* * Ignore attempted set if overridden by previously processed setting. *************** *** 3766,3773 **** } else { ! newval = conf->reset_val; ! source = conf->gen.reset_source; } if (conf->assign_hook) --- 3766,3784 ---- } else { ! /* 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; ! } } if (conf->assign_hook) *************** *** 3850,3857 **** } else { ! newval = conf->reset_val; ! source = conf->gen.reset_source; } if (conf->assign_hook) --- 3861,3879 ---- } else { ! /* 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; ! } } if (conf->assign_hook) *************** *** 3934,3941 **** } else { ! newval = conf->reset_val; ! source = conf->gen.reset_source; } if (conf->assign_hook) --- 3956,3974 ---- } else { ! /* 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; ! } } if (conf->assign_hook) *************** *** 4009,4014 **** --- 4042,4061 ---- if (conf->gen.flags & GUC_IS_NAME) truncate_identifier(newval, strlen(newval), true); } + 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; + } + } else if (conf->reset_val) { /* *************** *** 5111,5116 **** --- 5158,5168 ---- static bool is_newvalue_equal(struct config_generic *record, const char *newvalue) { + if( !newvalue ) + { + return false; + } + switch (record->vartype) { case PGC_BOOL: Index: src/include/utils/guc_tables.h =================================================================== RCS file: /projects/cvsroot/pgsql/src/include/utils/guc_tables.h,v retrieving revision 1.22 diff -c -r1.22 guc_tables.h *** src/include/utils/guc_tables.h 5 Mar 2006 15:59:07 -0000 1.22 --- src/include/utils/guc_tables.h 24 May 2006 14:10:13 -0000 *************** *** 142,152 **** /* these fields must be set correctly in initial value: */ /* (all but reset_val are constants) */ bool *variable; ! bool reset_val; GucBoolAssignHook assign_hook; GucShowHook show_hook; /* variable fields, initialized at runtime: */ bool tentative_val; }; struct config_int --- 142,153 ---- /* these fields must be set correctly in initial value: */ /* (all but reset_val are constants) */ bool *variable; ! bool default_val; GucBoolAssignHook assign_hook; GucShowHook show_hook; /* variable fields, initialized at runtime: */ bool tentative_val; + bool reset_val; }; struct config_int *************** *** 155,167 **** /* these fields must be set correctly in initial value: */ /* (all but reset_val are constants) */ int *variable; ! int reset_val; int min; int max; GucIntAssignHook assign_hook; GucShowHook show_hook; /* variable fields, initialized at runtime: */ int tentative_val; }; struct config_real --- 156,169 ---- /* these fields must be set correctly in initial value: */ /* (all but reset_val are constants) */ int *variable; ! int default_val; int min; int max; GucIntAssignHook assign_hook; GucShowHook show_hook; /* variable fields, initialized at runtime: */ int tentative_val; + int reset_val; }; struct config_real *************** *** 170,182 **** /* these fields must be set correctly in initial value: */ /* (all but reset_val are constants) */ double *variable; ! double reset_val; double min; double max; GucRealAssignHook assign_hook; GucShowHook show_hook; /* variable fields, initialized at runtime: */ double tentative_val; }; struct config_string --- 172,186 ---- /* these fields must be set correctly in initial value: */ /* (all but reset_val are constants) */ double *variable; ! double default_val; double min; double max; GucRealAssignHook assign_hook; GucShowHook show_hook; /* variable fields, initialized at runtime: */ double tentative_val; + double reset_val; + }; struct config_string
В списке pgsql-patches по дате отправления:
Предыдущее
От: Alvaro HerreraДата:
Сообщение: Re: Allow commenting of variables in postgresql.conf to