diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index d64cff96ab..767ef918c7 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -7329,9 +7329,12 @@ set_config_option(const char *name, const char *value, * Other changes might need to affect other workers, so forbid them. */ if (IsInParallelMode() && changeVal && action != GUC_ACTION_SAVE) + { ereport(elevel, (errcode(ERRCODE_INVALID_TRANSACTION_STATE), errmsg("cannot set parameters during a parallel operation"))); + return -1; + } record = find_option(name, true, false, elevel); if (record == NULL) @@ -7416,6 +7419,10 @@ set_config_option(const char *name, const char *value, * backends. This is a tad klugy, but necessary because we * don't re-read the config file during backend start. * + * However, if changeVal is false then plow ahead anyway since + * we are trying to find out if the value is potentially good, + * not actually use it. + * * In EXEC_BACKEND builds, this works differently: we load all * non-default settings from the CONFIG_EXEC_PARAMS file * during backend start. In that case we must accept @@ -7426,7 +7433,7 @@ set_config_option(const char *name, const char *value, * started it. is_reload will be true when either situation * applies. */ - if (IsUnderPostmaster && !is_reload) + if (IsUnderPostmaster && changeVal && !is_reload) return -1; } else if (context != PGC_POSTMASTER &&