diff --git a/src/backend/utils/misc/guc-file.l b/src/backend/utils/misc/guc-file.l index ed5c77f..ec001d6 100644 *** a/src/backend/utils/misc/guc-file.l --- b/src/backend/utils/misc/guc-file.l *************** ProcessConfigFile(GucContext context) *** 110,132 **** *tail; char *cvc = NULL; struct config_string *cvc_struct; ! int i; bool OK = true; Assert(context == PGC_POSTMASTER || context == PGC_SIGHUP); ! if (context == PGC_SIGHUP) ! { ! /* ! * To avoid cluttering the log, only the postmaster bleats loudly ! * about problems with the config file. ! */ ! elevel = IsUnderPostmaster ? DEBUG2 : LOG; ! } ! else ! elevel = LOG; ! ! /* Parse the file into a list of option names and values */ head = tail = NULL; if (!ParseConfigFile(ConfigFileName, NULL, 0, elevel, &head, &tail)) --- 110,135 ---- *tail; char *cvc = NULL; struct config_string *cvc_struct; ! int i; bool OK = true; + /* Config files are only processes on startup (by the postmaster) + * and on SIGUP (by the postmaster and backends) + */ Assert(context == PGC_POSTMASTER || context == PGC_SIGHUP); + Assert(!(context == PGC_POSTMATER && IsUnderPostmaster)); ! /* ! * To avoid cluttering the log, only the postmaster bleats loudly ! * about problems with the config file. ! */ ! elevel = IsUnderPostmaster ? DEBUG2 : LOG; ! ! /* Parse the file into a list of option names and values. ! * We continue even if we hit a parse errors because we ! * also want to report invalid value in the parts we ! * could parse ! */ head = tail = NULL; if (!ParseConfigFile(ConfigFileName, NULL, 0, elevel, &head, &tail)) *************** ProcessConfigFile(GucContext context) *** 223,231 **** if (!set_config_option(item->name, item->value, context, PGC_S_FILE, GUC_ACTION_SET, false)) OK = false; - /* stop at the first error if we are postmaster's child */ - if (IsUnderPostmaster && !OK) - break; } /* Don't change configuration options if errors were detected earlier */ if (!OK) --- 226,231 ---- *************** ParseConfigFp(FILE *fp, const char *conf *** 592,598 **** /* skip over parse_error if we made it this far without errors */ continue; ! parse_error: if (token == GUC_EOL || token == 0) ereport(elevel, (errcode(ERRCODE_SYNTAX_ERROR), --- 592,598 ---- /* skip over parse_error if we made it this far without errors */ continue; ! parse_error: if (token == GUC_EOL || token == 0) ereport(elevel, (errcode(ERRCODE_SYNTAX_ERROR), *************** ParseConfigFp(FILE *fp, const char *conf *** 605,611 **** config_file, ConfigFileLineno, yytext))); errorcount++; /* fast forward till the next EOL/EOF */ ! while (token && token != GUC_EOL) token = yylex(); /* break out of loop on EOF */ --- 605,611 ---- config_file, ConfigFileLineno, yytext))); errorcount++; /* fast forward till the next EOL/EOF */ ! while (token != 0 && token != GUC_EOL) token = yylex(); /* break out of loop on EOF */ *************** ParseConfigFp(FILE *fp, const char *conf *** 613,619 **** break; /* avoid producing too much noise when parsing a bogus file */ ! if (IsUnderPostmaster || errorcount >= 100) break; } --- 613,619 ---- break; /* avoid producing too much noise when parsing a bogus file */ ! if (errorcount >= 100) break; } diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index 3088ccc..fc195c5 100644 *** a/src/backend/utils/misc/guc.c --- b/src/backend/utils/misc/guc.c *************** config_enum_get_options(struct config_en *** 5055,5061 **** * * If there is an error (non-existing option, invalid value) then an * ereport(ERROR) is thrown *unless* this is called in a context where we ! * don't want to ereport (currently, startup or SIGHUP config file reread). * In that case we write a suitable error message via ereport(LOG) and * return false. This is working around the deficiencies in the ereport * mechanism, so don't blame me. In all other cases, the function --- 5055,5061 ---- * * If there is an error (non-existing option, invalid value) then an * ereport(ERROR) is thrown *unless* this is called in a context where we ! * don't want to ereport (currently, settings defaults and cfg file reading) * In that case we write a suitable error message via ereport(LOG) and * return false. This is working around the deficiencies in the ereport * mechanism, so don't blame me. In all other cases, the function