From 255eeb624d6d3493d82cbd152c9c714cc68dad4b Mon Sep 17 00:00:00 2001 From: Peter Smith Date: Tue, 28 Nov 2023 11:49:04 +1100 Subject: [PATCH v3] GUC names - maybe add quotes --- src/backend/utils/misc/guc.c | 273 ++++++++++++++------- .../test_oat_hooks/expected/test_oat_hooks.out | 4 +- .../modules/unsafe_tests/expected/guc_privs.out | 54 ++-- .../modules/unsafe_tests/expected/rolenames.out | 2 +- src/test/regress/expected/compression.out | 4 +- src/test/regress/expected/compression_1.out | 6 +- src/test/regress/expected/create_am.out | 4 +- src/test/regress/expected/guc.out | 10 +- src/test/regress/expected/password.out | 4 +- src/test/regress/expected/subscription.out | 2 +- src/test/regress/expected/transactions.out | 8 +- 11 files changed, 233 insertions(+), 138 deletions(-) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index e76c083..248d2cb 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -265,6 +265,45 @@ static bool call_string_check_hook(struct config_string *conf, char **newval, static bool call_enum_check_hook(struct config_enum *conf, int *newval, void **extra, GucSource source, int elevel); +/* Handy macro for adding optional quotes to GUC names during substitution. */ +#define GUC_FORMAT(s)\ + quotes_needed_for_GUC_name(s) ? "\"" : "",\ + s,\ + quotes_needed_for_GUC_name(s) ? "\"" : "" + +/* + * Return whether the GUC name should be enclosed in double-quotes. + * + * Quoting is intended for names which potential could be mistaken for + * normal English words. + * + * - Lowercase alpha needs quotes unless there are underscores + * - Upper/mixed case alpha does not need quotes + * - Anything else needs quotes + */ +static +bool +quotes_needed_for_GUC_name(const char *name) +{ + bool underscore = false; + bool lowercase = false; + bool uppercase = false; + bool other = false; + + for (const char *p = name; *p; p++) + { + if (*p == '_') + underscore = true; + else if ('a' <= *p && *p <= 'z') + lowercase = true; + else if ('A' <= *p && *p <= 'Z') + uppercase = true; + else + other = true; + } + + return other || (lowercase && !underscore && !uppercase); +} /* * This function handles both actual config file (re)loads and execution of @@ -420,8 +459,9 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel) /* Invalid non-custom variable, so complain */ ereport(elevel, (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("unrecognized configuration parameter \"%s\" in file \"%s\" line %d", - item->name, + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("unrecognized configuration parameter %s%s%s in file \"%s\" line %d", + GUC_FORMAT(item->name), item->filename, item->sourceline))); item->errmsg = pstrdup("unrecognized configuration parameter"); error = true; @@ -460,10 +500,13 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel) gconf->status |= GUC_PENDING_RESTART; ereport(elevel, (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM), - errmsg("parameter \"%s\" cannot be changed without restarting the server", - gconf->name))); - record_config_file_error(psprintf("parameter \"%s\" cannot be changed without restarting the server", - gconf->name), + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("parameter %s%s%s cannot be changed without restarting the server", + GUC_FORMAT(gconf->name)))); + record_config_file_error( + /* translator: %s%s%s is for an optionally quoted GUC name */ + psprintf("parameter %s%s%s cannot be changed without restarting the server", + GUC_FORMAT(gconf->name)), NULL, 0, &head, &tail); error = true; @@ -496,8 +539,9 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel) /* Log the change if appropriate */ if (context == PGC_SIGHUP) ereport(elevel, - (errmsg("parameter \"%s\" removed from configuration file, reset to default", - gconf->name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + (errmsg("parameter %s%s%s removed from configuration file, reset to default", + GUC_FORMAT(gconf->name)))); } } @@ -561,8 +605,10 @@ ProcessConfigFileInternal(GucContext context, bool applySettings, int elevel) post_value = ""; if (strcmp(pre_value, post_value) != 0) ereport(elevel, - (errmsg("parameter \"%s\" changed to \"%s\"", - item->name, item->value))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + (errmsg("parameter %s%s%s changed to \"%s\"", + GUC_FORMAT(item->name), + item->value))); } item->applied = true; } @@ -1129,8 +1175,9 @@ assignable_custom_variable_name(const char *name, bool skip_errors, int elevel) if (!skip_errors) ereport(elevel, (errcode(ERRCODE_INVALID_NAME), - errmsg("invalid configuration parameter name \"%s\"", - name), + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("invalid configuration parameter name %s%s%s", + GUC_FORMAT(name)), errdetail("Custom parameter names must be two or more simple identifiers separated by dots."))); return false; } @@ -1145,8 +1192,9 @@ assignable_custom_variable_name(const char *name, bool skip_errors, int elevel) if (!skip_errors) ereport(elevel, (errcode(ERRCODE_INVALID_NAME), - errmsg("invalid configuration parameter name \"%s\"", - name), + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("invalid configuration parameter name %s%s%s", + GUC_FORMAT(name)), errdetail("\"%s\" is a reserved prefix.", rcprefix))); return false; @@ -1160,8 +1208,9 @@ assignable_custom_variable_name(const char *name, bool skip_errors, int elevel) if (!skip_errors) ereport(elevel, (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("unrecognized configuration parameter \"%s\"", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("unrecognized configuration parameter %s%s%s", + GUC_FORMAT(name)))); return false; } @@ -1270,8 +1319,9 @@ find_option(const char *name, bool create_placeholders, bool skip_errors, if (!skip_errors) ereport(elevel, (errcode(ERRCODE_UNDEFINED_OBJECT), - errmsg("unrecognized configuration parameter \"%s\"", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("unrecognized configuration parameter %s%s%s", + GUC_FORMAT(name)))); return NULL; } @@ -3125,8 +3175,9 @@ parse_and_validate_value(struct config_generic *record, { ereport(elevel, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("parameter \"%s\" requires a Boolean value", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("parameter %s%s%s requires a Boolean value", + GUC_FORMAT(name)))); return false; } @@ -3145,8 +3196,9 @@ parse_and_validate_value(struct config_generic *record, { ereport(elevel, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("invalid value for parameter \"%s\": \"%s\"", - name, value), + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("invalid value for parameter %s%s%s: \"%s\"", + GUC_FORMAT(name), value), hintmsg ? errhint("%s", _(hintmsg)) : 0)); return false; } @@ -3157,11 +3209,12 @@ parse_and_validate_value(struct config_generic *record, ereport(elevel, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)", + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("%d%s%s is outside the valid range for parameter %s%s%s (%d .. %d)", newval->intval, unit ? " " : "", unit ? unit : "", - name, + GUC_FORMAT(name), conf->min, conf->max))); return false; } @@ -3181,8 +3234,9 @@ parse_and_validate_value(struct config_generic *record, { ereport(elevel, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("invalid value for parameter \"%s\": \"%s\"", - name, value), + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("invalid value for parameter %s%s%s: \"%s\"", + GUC_FORMAT(name), value), hintmsg ? errhint("%s", _(hintmsg)) : 0)); return false; } @@ -3193,11 +3247,12 @@ parse_and_validate_value(struct config_generic *record, ereport(elevel, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)", + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("%g%s%s is outside the valid range for parameter %s%s%s (%g .. %g)", newval->realval, unit ? " " : "", unit ? unit : "", - name, + GUC_FORMAT(name), conf->min, conf->max))); return false; } @@ -3251,8 +3306,9 @@ parse_and_validate_value(struct config_generic *record, ereport(elevel, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("invalid value for parameter \"%s\": \"%s\"", - name, value), + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("invalid value for parameter %s%s%s: \"%s\"", + GUC_FORMAT(name), value), hintmsg ? errhint("%s", _(hintmsg)) : 0)); if (hintmsg) @@ -3410,8 +3466,9 @@ set_config_option_ext(const char *name, const char *value, { ereport(elevel, (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM), - errmsg("parameter \"%s\" cannot be changed", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("parameter %s%s%s cannot be changed", + GUC_FORMAT(name)))); return 0; } break; @@ -3433,8 +3490,9 @@ set_config_option_ext(const char *name, const char *value, { ereport(elevel, (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM), - errmsg("parameter \"%s\" cannot be changed without restarting the server", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("parameter %s%s%s cannot be changed without restarting the server", + GUC_FORMAT(name)))); return 0; } break; @@ -3443,8 +3501,9 @@ set_config_option_ext(const char *name, const char *value, { ereport(elevel, (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM), - errmsg("parameter \"%s\" cannot be changed now", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("parameter %s%s%s cannot be changed now", + GUC_FORMAT(name)))); return 0; } @@ -3470,8 +3529,9 @@ set_config_option_ext(const char *name, const char *value, /* No granted privilege */ ereport(elevel, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("permission denied to set parameter \"%s\"", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("permission denied to set parameter %s%s%s", + GUC_FORMAT(name)))); return 0; } } @@ -3508,8 +3568,9 @@ set_config_option_ext(const char *name, const char *value, { ereport(elevel, (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM), - errmsg("parameter \"%s\" cannot be set after connection start", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("parameter %s%s%s cannot be set after connection start", + GUC_FORMAT(name)))); return 0; } break; @@ -3528,8 +3589,9 @@ set_config_option_ext(const char *name, const char *value, /* No granted privilege */ ereport(elevel, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("permission denied to set parameter \"%s\"", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("permission denied to set parameter %s%s%s", + GUC_FORMAT(name)))); return 0; } } @@ -3567,16 +3629,18 @@ set_config_option_ext(const char *name, const char *value, */ ereport(elevel, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("cannot set parameter \"%s\" within security-definer function", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("cannot set parameter %s%s%s within security-definer function", + GUC_FORMAT(name)))); return 0; } if (InSecurityRestrictedOperation()) { ereport(elevel, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("cannot set parameter \"%s\" within security-restricted operation", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("cannot set parameter %s%s%s within security-restricted operation", + GUC_FORMAT(name)))); return 0; } } @@ -3588,15 +3652,18 @@ set_config_option_ext(const char *name, const char *value, { ereport(elevel, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("parameter \"%s\" cannot be reset", name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("parameter %s%s%s cannot be reset", + GUC_FORMAT(name)))); return 0; } if (action == GUC_ACTION_SAVE) { ereport(elevel, (errcode(ERRCODE_FEATURE_NOT_SUPPORTED), - errmsg("parameter \"%s\" cannot be set locally in functions", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("parameter %s%s%s cannot be set locally in functions", + GUC_FORMAT(name)))); return 0; } } @@ -3621,8 +3688,8 @@ set_config_option_ext(const char *name, const char *value, { if (changeVal && !makeDefault) { - elog(DEBUG3, "\"%s\": setting ignored because previous source is higher priority", - name); + elog(DEBUG3, "%s%s%s: setting ignored because previous source is higher priority", + GUC_FORMAT(name)); return -1; } changeVal = false; @@ -3673,8 +3740,9 @@ set_config_option_ext(const char *name, const char *value, record->status |= GUC_PENDING_RESTART; ereport(elevel, (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM), - errmsg("parameter \"%s\" cannot be changed without restarting the server", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("parameter %s%s%s cannot be changed without restarting the server", + GUC_FORMAT(name)))); return 0; } record->status &= ~GUC_PENDING_RESTART; @@ -3771,8 +3839,9 @@ set_config_option_ext(const char *name, const char *value, record->status |= GUC_PENDING_RESTART; ereport(elevel, (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM), - errmsg("parameter \"%s\" cannot be changed without restarting the server", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("parameter %s%s%s cannot be changed without restarting the server", + GUC_FORMAT(name)))); return 0; } record->status &= ~GUC_PENDING_RESTART; @@ -3869,8 +3938,9 @@ set_config_option_ext(const char *name, const char *value, record->status |= GUC_PENDING_RESTART; ereport(elevel, (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM), - errmsg("parameter \"%s\" cannot be changed without restarting the server", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("parameter %s%s%s cannot be changed without restarting the server", + GUC_FORMAT(name)))); return 0; } record->status &= ~GUC_PENDING_RESTART; @@ -3993,8 +4063,9 @@ set_config_option_ext(const char *name, const char *value, record->status |= GUC_PENDING_RESTART; ereport(elevel, (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM), - errmsg("parameter \"%s\" cannot be changed without restarting the server", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("parameter %s%s%s cannot be changed without restarting the server", + GUC_FORMAT(name)))); return 0; } record->status &= ~GUC_PENDING_RESTART; @@ -4096,8 +4167,9 @@ set_config_option_ext(const char *name, const char *value, record->status |= GUC_PENDING_RESTART; ereport(elevel, (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM), - errmsg("parameter \"%s\" cannot be changed without restarting the server", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("parameter %s%s%s cannot be changed without restarting the server", + GUC_FORMAT(name)))); return 0; } record->status &= ~GUC_PENDING_RESTART; @@ -4238,7 +4310,9 @@ GetConfigOption(const char *name, bool missing_ok, bool restrict_privileged) !ConfigOptionIsVisible(record)) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("permission denied to examine \"%s\"", name), + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("permission denied to examine %s%s%s", + GUC_FORMAT(name)), errdetail("Only roles with privileges of the \"%s\" role may examine this parameter.", "pg_read_all_settings"))); @@ -4534,8 +4608,9 @@ AlterSystemSetConfigFile(AlterSystemStmt *altersysstmt) if (aclresult != ACLCHECK_OK) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("permission denied to set parameter \"%s\"", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("permission denied to set parameter %s%s%s", + GUC_FORMAT(name)))); } } @@ -4559,8 +4634,9 @@ AlterSystemSetConfigFile(AlterSystemStmt *altersysstmt) (record->flags & GUC_DISALLOW_IN_AUTO_FILE)) ereport(ERROR, (errcode(ERRCODE_CANT_CHANGE_RUNTIME_PARAM), - errmsg("parameter \"%s\" cannot be changed", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("parameter %s%s%s cannot be changed", + GUC_FORMAT(name)))); /* * If a value is specified, verify that it's sane. @@ -4575,8 +4651,9 @@ AlterSystemSetConfigFile(AlterSystemStmt *altersysstmt) &newval, &newextra)) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("invalid value for parameter \"%s\": \"%s\"", - name, value))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("invalid value for parameter %s%s%s: \"%s\"", + GUC_FORMAT(name), value))); if (record->vartype == PGC_STRING && newval.stringval != NULL) guc_free(newval.stringval); @@ -4830,7 +4907,9 @@ define_custom_variable(struct config_generic *variable) if ((hentry->gucvar->flags & GUC_CUSTOM_PLACEHOLDER) == 0) ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), - errmsg("attempt to redefine parameter \"%s\"", name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("attempt to redefine parameter %s%s%s", + GUC_FORMAT(name)))); Assert(hentry->gucvar->vartype == PGC_STRING); pHolder = (struct config_string *) hentry->gucvar; @@ -5169,8 +5248,9 @@ MarkGUCPrefixReserved(const char *className) { ereport(WARNING, (errcode(ERRCODE_INVALID_NAME), - errmsg("invalid configuration parameter name \"%s\", removing it", - var->name), + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("invalid configuration parameter name %s%s%s, removing it", + GUC_FORMAT(var->name)), errdetail("\"%s\" is now a reserved prefix.", className))); /* Remove it from the hash table */ @@ -5313,7 +5393,9 @@ GetConfigOptionByName(const char *name, const char **varname, bool missing_ok) if (!ConfigOptionIsVisible(record)) ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("permission denied to examine \"%s\"", name), + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("permission denied to examine %s%s%s", + GUC_FORMAT(name)), errdetail("Only roles with privileges of the \"%s\" role may examine this parameter.", "pg_read_all_settings"))); @@ -5639,7 +5721,8 @@ read_nondefault_variables(void) break; if (find_option(varname, true, false, FATAL) == NULL) - elog(FATAL, "failed to locate variable \"%s\" in exec config params file", varname); + elog(FATAL, "failed to locate variable %s%s%s in exec config params file", + GUC_FORMAT(varname)); if ((varvalue = read_string_with_null(fp)) == NULL) elog(FATAL, "invalid format of exec config params file"); @@ -6048,8 +6131,9 @@ guc_restore_error_context_callback(void *arg) char **error_context_name_and_value = (char **) arg; if (error_context_name_and_value) - errcontext("while setting parameter \"%s\" to \"%s\"", - error_context_name_and_value[0], + /* translator: %s%s%s is for an optionally quoted GUC name */ + errcontext("while setting parameter %s%s%s to \"%s\"", + GUC_FORMAT(error_context_name_and_value[0]), error_context_name_and_value[1]); } @@ -6217,7 +6301,9 @@ RestoreGUCState(void *gucstate) if (result <= 0) ereport(ERROR, (errcode(ERRCODE_INTERNAL_ERROR), - errmsg("parameter \"%s\" could not be set", varname))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("parameter %s%s%s could not be set", + GUC_FORMAT(varname)))); if (varsourcefile[0]) set_config_sourcefile(varname, varsourcefile, varsourceline); error_context_callback.arg = NULL; @@ -6307,8 +6393,9 @@ TransformGUCArray(ArrayType *array, List **names, List **values) { ereport(WARNING, (errcode(ERRCODE_SYNTAX_ERROR), - errmsg("could not parse setting for parameter \"%s\"", - name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("could not parse setting for parameter %s%s%s", + GUC_FORMAT(name)))); pfree(name); continue; } @@ -6625,7 +6712,9 @@ validate_option_array_item(const char *name, const char *value, return false; ereport(ERROR, (errcode(ERRCODE_INSUFFICIENT_PRIVILEGE), - errmsg("permission denied to set parameter \"%s\"", name))); + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("permission denied to set parameter %s%s%s", + GUC_FORMAT(name)))); } /* manual permissions check so we can avoid an error being thrown */ @@ -6689,8 +6778,9 @@ call_bool_check_hook(struct config_bool *conf, bool *newval, void **extra, (errcode(GUC_check_errcode_value), GUC_check_errmsg_string ? errmsg_internal("%s", GUC_check_errmsg_string) : - errmsg("invalid value for parameter \"%s\": %d", - conf->gen.name, (int) *newval), + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("invalid value for parameter %s%s%s: %d", + GUC_FORMAT(conf->gen.name), (int) *newval), GUC_check_errdetail_string ? errdetail_internal("%s", GUC_check_errdetail_string) : 0, GUC_check_errhint_string ? @@ -6723,8 +6813,9 @@ call_int_check_hook(struct config_int *conf, int *newval, void **extra, (errcode(GUC_check_errcode_value), GUC_check_errmsg_string ? errmsg_internal("%s", GUC_check_errmsg_string) : - errmsg("invalid value for parameter \"%s\": %d", - conf->gen.name, *newval), + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("invalid value for parameter %s%s%s: %d", + GUC_FORMAT(conf->gen.name), *newval), GUC_check_errdetail_string ? errdetail_internal("%s", GUC_check_errdetail_string) : 0, GUC_check_errhint_string ? @@ -6757,8 +6848,9 @@ call_real_check_hook(struct config_real *conf, double *newval, void **extra, (errcode(GUC_check_errcode_value), GUC_check_errmsg_string ? errmsg_internal("%s", GUC_check_errmsg_string) : - errmsg("invalid value for parameter \"%s\": %g", - conf->gen.name, *newval), + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("invalid value for parameter %s%s%s: %g", + GUC_FORMAT(conf->gen.name), *newval), GUC_check_errdetail_string ? errdetail_internal("%s", GUC_check_errdetail_string) : 0, GUC_check_errhint_string ? @@ -6800,8 +6892,10 @@ call_string_check_hook(struct config_string *conf, char **newval, void **extra, (errcode(GUC_check_errcode_value), GUC_check_errmsg_string ? errmsg_internal("%s", GUC_check_errmsg_string) : - errmsg("invalid value for parameter \"%s\": \"%s\"", - conf->gen.name, *newval ? *newval : ""), + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("invalid value for parameter %s%s%s: \"%s\"", + GUC_FORMAT(conf->gen.name), + *newval ? *newval : ""), GUC_check_errdetail_string ? errdetail_internal("%s", GUC_check_errdetail_string) : 0, GUC_check_errhint_string ? @@ -6841,8 +6935,9 @@ call_enum_check_hook(struct config_enum *conf, int *newval, void **extra, (errcode(GUC_check_errcode_value), GUC_check_errmsg_string ? errmsg_internal("%s", GUC_check_errmsg_string) : - errmsg("invalid value for parameter \"%s\": \"%s\"", - conf->gen.name, + /* translator: %s%s%s is for an optionally quoted GUC name */ + errmsg("invalid value for parameter %s%s%s: \"%s\"", + GUC_FORMAT(conf->gen.name), config_enum_lookup_by_value(conf, *newval)), GUC_check_errdetail_string ? errdetail_internal("%s", GUC_check_errdetail_string) : 0, diff --git a/src/test/modules/test_oat_hooks/expected/test_oat_hooks.out b/src/test/modules/test_oat_hooks/expected/test_oat_hooks.out index f80373a..ccaa65e 100644 --- a/src/test/modules/test_oat_hooks/expected/test_oat_hooks.out +++ b/src/test/modules/test_oat_hooks/expected/test_oat_hooks.out @@ -180,10 +180,10 @@ NOTICE: in object_access_hook_str: non-superuser finished alter (subId=0x1000, NOTICE: in process utility: non-superuser finished RESET ALTER SYSTEM SET work_mem = 8192; NOTICE: in process utility: non-superuser attempting ALTER SYSTEM -ERROR: permission denied to set parameter "work_mem" +ERROR: permission denied to set parameter work_mem ALTER SYSTEM RESET work_mem; NOTICE: in process utility: non-superuser attempting ALTER SYSTEM -ERROR: permission denied to set parameter "work_mem" +ERROR: permission denied to set parameter work_mem SET test_oat_hooks.user_var1 = true; NOTICE: in process utility: non-superuser attempting SET NOTICE: in object_access_hook_str: non-superuser attempting alter (subId=0x1000, set) [test_oat_hooks.user_var1] diff --git a/src/test/modules/unsafe_tests/expected/guc_privs.out b/src/test/modules/unsafe_tests/expected/guc_privs.out index 6c0ad89..5ed2113 100644 --- a/src/test/modules/unsafe_tests/expected/guc_privs.out +++ b/src/test/modules/unsafe_tests/expected/guc_privs.out @@ -8,31 +8,31 @@ CREATE ROLE regress_admin SUPERUSER; SET SESSION AUTHORIZATION regress_admin; -- PGC_BACKEND SET ignore_system_indexes = OFF; -- fail, cannot be set after connection start -ERROR: parameter "ignore_system_indexes" cannot be set after connection start +ERROR: parameter ignore_system_indexes cannot be set after connection start RESET ignore_system_indexes; -- fail, cannot be set after connection start -ERROR: parameter "ignore_system_indexes" cannot be set after connection start +ERROR: parameter ignore_system_indexes cannot be set after connection start ALTER SYSTEM SET ignore_system_indexes = OFF; -- ok ALTER SYSTEM RESET ignore_system_indexes; -- ok -- PGC_INTERNAL SET block_size = 50; -- fail, cannot be changed -ERROR: parameter "block_size" cannot be changed +ERROR: parameter block_size cannot be changed RESET block_size; -- fail, cannot be changed -ERROR: parameter "block_size" cannot be changed +ERROR: parameter block_size cannot be changed ALTER SYSTEM SET block_size = 50; -- fail, cannot be changed -ERROR: parameter "block_size" cannot be changed +ERROR: parameter block_size cannot be changed ALTER SYSTEM RESET block_size; -- fail, cannot be changed -ERROR: parameter "block_size" cannot be changed +ERROR: parameter block_size cannot be changed -- PGC_POSTMASTER SET autovacuum_freeze_max_age = 1000050000; -- fail, requires restart -ERROR: parameter "autovacuum_freeze_max_age" cannot be changed without restarting the server +ERROR: parameter autovacuum_freeze_max_age cannot be changed without restarting the server RESET autovacuum_freeze_max_age; -- fail, requires restart -ERROR: parameter "autovacuum_freeze_max_age" cannot be changed without restarting the server +ERROR: parameter autovacuum_freeze_max_age cannot be changed without restarting the server ALTER SYSTEM SET autovacuum_freeze_max_age = 1000050000; -- ok ALTER SYSTEM RESET autovacuum_freeze_max_age; -- ok ALTER SYSTEM SET config_file = '/usr/local/data/postgresql.conf'; -- fail, cannot be changed -ERROR: parameter "config_file" cannot be changed +ERROR: parameter config_file cannot be changed ALTER SYSTEM RESET config_file; -- fail, cannot be changed -ERROR: parameter "config_file" cannot be changed +ERROR: parameter config_file cannot be changed -- PGC_SIGHUP SET autovacuum = OFF; -- fail, requires reload ERROR: parameter "autovacuum" cannot be changed now @@ -47,9 +47,9 @@ ALTER SYSTEM SET lc_messages = 'C'; -- ok ALTER SYSTEM RESET lc_messages; -- ok -- PGC_SU_BACKEND SET jit_debugging_support = OFF; -- fail, cannot be set after connection start -ERROR: parameter "jit_debugging_support" cannot be set after connection start +ERROR: parameter jit_debugging_support cannot be set after connection start RESET jit_debugging_support; -- fail, cannot be set after connection start -ERROR: parameter "jit_debugging_support" cannot be set after connection start +ERROR: parameter jit_debugging_support cannot be set after connection start ALTER SYSTEM SET jit_debugging_support = OFF; -- ok ALTER SYSTEM RESET jit_debugging_support; -- ok -- PGC_USERSET @@ -58,9 +58,9 @@ RESET DateStyle; -- ok ALTER SYSTEM SET DateStyle = 'ISO, MDY'; -- ok ALTER SYSTEM RESET DateStyle; -- ok ALTER SYSTEM SET ssl_renegotiation_limit = 0; -- fail, cannot be changed -ERROR: parameter "ssl_renegotiation_limit" cannot be changed +ERROR: parameter ssl_renegotiation_limit cannot be changed ALTER SYSTEM RESET ssl_renegotiation_limit; -- fail, cannot be changed -ERROR: parameter "ssl_renegotiation_limit" cannot be changed +ERROR: parameter ssl_renegotiation_limit cannot be changed -- Finished testing superuser -- Create non-superuser with privileges to configure host resource usage CREATE ROLE regress_host_resource_admin NOSUPERUSER; @@ -244,7 +244,7 @@ SHOW none.such; -- Can't grant on a non-existent core GUC. GRANT ALL ON PARAMETER no_such_guc TO regress_host_resource_admin; -- fail -ERROR: unrecognized configuration parameter "no_such_guc" +ERROR: unrecognized configuration parameter no_such_guc -- Initially there are no privileges and no catalog entry for this GUC. SELECT has_parameter_privilege('regress_host_resource_admin', 'enable_material', 'SET'); has_parameter_privilege @@ -446,17 +446,17 @@ ALTER ROLE regress_host_resource_admin SET lc_messages = 'C'; SET SESSION AUTHORIZATION regress_host_resource_admin; ALTER SYSTEM SET autovacuum_work_mem = 32; -- ok, privileges have been granted ALTER SYSTEM SET ignore_system_indexes = OFF; -- fail, insufficient privileges -ERROR: permission denied to set parameter "ignore_system_indexes" +ERROR: permission denied to set parameter ignore_system_indexes ALTER SYSTEM RESET autovacuum_multixact_freeze_max_age; -- fail, insufficient privileges -ERROR: permission denied to set parameter "autovacuum_multixact_freeze_max_age" +ERROR: permission denied to set parameter autovacuum_multixact_freeze_max_age SET jit_provider = 'llvmjit'; -- fail, insufficient privileges -ERROR: parameter "jit_provider" cannot be changed without restarting the server +ERROR: parameter jit_provider cannot be changed without restarting the server SELECT set_config ('jit_provider', 'llvmjit', true); -- fail, insufficient privileges -ERROR: parameter "jit_provider" cannot be changed without restarting the server +ERROR: parameter jit_provider cannot be changed without restarting the server ALTER SYSTEM SET shared_buffers = 50; -- ok ALTER SYSTEM RESET shared_buffers; -- ok SET autovacuum_work_mem = 50; -- cannot be changed now -ERROR: parameter "autovacuum_work_mem" cannot be changed now +ERROR: parameter autovacuum_work_mem cannot be changed now ALTER SYSTEM RESET temp_file_limit; -- ok SET TimeZone = 'Europe/Helsinki'; -- ok RESET TimeZone; -- ok @@ -465,13 +465,13 @@ RESET max_stack_depth; -- ok, privileges have been granted ALTER SYSTEM SET max_stack_depth = '100kB'; -- ok, privileges have been granted ALTER SYSTEM RESET max_stack_depth; -- ok, privileges have been granted SET lc_messages = 'C'; -- fail, insufficient privileges -ERROR: permission denied to set parameter "lc_messages" +ERROR: permission denied to set parameter lc_messages RESET lc_messages; -- fail, insufficient privileges -ERROR: permission denied to set parameter "lc_messages" +ERROR: permission denied to set parameter lc_messages ALTER SYSTEM SET lc_messages = 'C'; -- fail, insufficient privileges -ERROR: permission denied to set parameter "lc_messages" +ERROR: permission denied to set parameter lc_messages ALTER SYSTEM RESET lc_messages; -- fail, insufficient privileges -ERROR: permission denied to set parameter "lc_messages" +ERROR: permission denied to set parameter lc_messages SELECT set_config ('temp_buffers', '8192', false); -- ok set_config ------------ @@ -484,7 +484,7 @@ ERROR: permission denied to perform ALTER SYSTEM RESET ALL ALTER SYSTEM SET none.such2 = 'whiz bang'; -- fail, not superuser ERROR: permission denied to set parameter "none.such2" ALTER ROLE regress_host_resource_admin SET lc_messages = 'POSIX'; -- fail -ERROR: permission denied to set parameter "lc_messages" +ERROR: permission denied to set parameter lc_messages ALTER ROLE regress_host_resource_admin SET max_stack_depth = '1MB'; -- ok SELECT setconfig FROM pg_db_role_setting WHERE setrole = 'regress_host_resource_admin'::regrole; @@ -537,7 +537,7 @@ DROP ROLE regress_host_resource_admin; -- ok CREATE ROLE regress_host_resource_admin NOSUPERUSER; SET SESSION AUTHORIZATION regress_host_resource_admin; ALTER SYSTEM SET autovacuum_work_mem = 32; -- fail, privileges not yet granted -ERROR: permission denied to set parameter "autovacuum_work_mem" +ERROR: permission denied to set parameter autovacuum_work_mem SET SESSION AUTHORIZATION regress_admin; GRANT SET, ALTER SYSTEM ON PARAMETER autovacuum_work_mem, hash_mem_multiplier, max_stack_depth, @@ -554,7 +554,7 @@ privileges for parameter work_mem DROP OWNED BY regress_host_resource_admin RESTRICT; -- cascade should not be needed SET SESSION AUTHORIZATION regress_host_resource_admin; ALTER SYSTEM SET autovacuum_work_mem = 32; -- fail, "drop owned" has dropped privileges -ERROR: permission denied to set parameter "autovacuum_work_mem" +ERROR: permission denied to set parameter autovacuum_work_mem SET SESSION AUTHORIZATION regress_admin; DROP ROLE regress_host_resource_admin; -- ok -- Check that "reassign owned" doesn't affect privileges diff --git a/src/test/modules/unsafe_tests/expected/rolenames.out b/src/test/modules/unsafe_tests/expected/rolenames.out index 61396b2..21d2bac 100644 --- a/src/test/modules/unsafe_tests/expected/rolenames.out +++ b/src/test/modules/unsafe_tests/expected/rolenames.out @@ -1077,7 +1077,7 @@ SHOW session_preload_libraries; SET SESSION AUTHORIZATION regress_role_nopriv; -- fails with role not member of pg_read_all_settings SHOW session_preload_libraries; -ERROR: permission denied to examine "session_preload_libraries" +ERROR: permission denied to examine session_preload_libraries DETAIL: Only roles with privileges of the "pg_read_all_settings" role may examine this parameter. RESET SESSION AUTHORIZATION; ERROR: current transaction is aborted, commands ignored until end of transaction block diff --git a/src/test/regress/expected/compression.out b/src/test/regress/expected/compression.out index 834b755..7426504 100644 --- a/src/test/regress/expected/compression.out +++ b/src/test/regress/expected/compression.out @@ -234,10 +234,10 @@ ERROR: column "f1" has a compression method conflict DETAIL: pglz versus lz4 -- test default_toast_compression GUC SET default_toast_compression = ''; -ERROR: invalid value for parameter "default_toast_compression": "" +ERROR: invalid value for parameter default_toast_compression: "" HINT: Available values: pglz, lz4. SET default_toast_compression = 'I do not exist compression'; -ERROR: invalid value for parameter "default_toast_compression": "I do not exist compression" +ERROR: invalid value for parameter default_toast_compression: "I do not exist compression" HINT: Available values: pglz, lz4. SET default_toast_compression = 'lz4'; SET default_toast_compression = 'pglz'; diff --git a/src/test/regress/expected/compression_1.out b/src/test/regress/expected/compression_1.out index ddcd137..5234e47 100644 --- a/src/test/regress/expected/compression_1.out +++ b/src/test/regress/expected/compression_1.out @@ -225,13 +225,13 @@ ERROR: column "f1" has a compression method conflict DETAIL: pglz versus lz4 -- test default_toast_compression GUC SET default_toast_compression = ''; -ERROR: invalid value for parameter "default_toast_compression": "" +ERROR: invalid value for parameter default_toast_compression: "" HINT: Available values: pglz. SET default_toast_compression = 'I do not exist compression'; -ERROR: invalid value for parameter "default_toast_compression": "I do not exist compression" +ERROR: invalid value for parameter default_toast_compression: "I do not exist compression" HINT: Available values: pglz. SET default_toast_compression = 'lz4'; -ERROR: invalid value for parameter "default_toast_compression": "lz4" +ERROR: invalid value for parameter default_toast_compression: "lz4" HINT: Available values: pglz. SET default_toast_compression = 'pglz'; -- test alter compression method diff --git a/src/test/regress/expected/create_am.out b/src/test/regress/expected/create_am.out index b50293d..afa11a6 100644 --- a/src/test/regress/expected/create_am.out +++ b/src/test/regress/expected/create_am.out @@ -112,11 +112,11 @@ COMMIT; -- -- prevent empty values SET default_table_access_method = ''; -ERROR: invalid value for parameter "default_table_access_method": "" +ERROR: invalid value for parameter default_table_access_method: "" DETAIL: default_table_access_method cannot be empty. -- prevent nonexistent values SET default_table_access_method = 'I do not exist AM'; -ERROR: invalid value for parameter "default_table_access_method": "I do not exist AM" +ERROR: invalid value for parameter default_table_access_method: "I do not exist AM" DETAIL: Table access method "I do not exist AM" does not exist. -- prevent setting it to an index AM SET default_table_access_method = 'btree'; diff --git a/src/test/regress/expected/guc.out b/src/test/regress/expected/guc.out index 127c953..cbf4e8f 100644 --- a/src/test/regress/expected/guc.out +++ b/src/test/regress/expected/guc.out @@ -508,11 +508,11 @@ SELECT '2006-08-13 12:34:56'::timestamptz; -- Test some simple error cases SET seq_page_cost TO 'NaN'; -ERROR: invalid value for parameter "seq_page_cost": "NaN" +ERROR: invalid value for parameter seq_page_cost: "NaN" SET vacuum_cost_delay TO '10s'; -ERROR: 10000 ms is outside the valid range for parameter "vacuum_cost_delay" (0 .. 100) +ERROR: 10000 ms is outside the valid range for parameter vacuum_cost_delay (0 .. 100) SET no_such_variable TO 42; -ERROR: unrecognized configuration parameter "no_such_variable" +ERROR: unrecognized configuration parameter no_such_variable -- Test "custom" GUCs created on the fly (which aren't really an -- intended feature, but many people use them). SHOW custom.my_guc; -- error, not known yet @@ -811,14 +811,14 @@ create function func_with_bad_set() returns int as $$ select 1 $$ language sql set default_text_search_config = no_such_config; NOTICE: text search configuration "no_such_config" does not exist -ERROR: invalid value for parameter "default_text_search_config": "no_such_config" +ERROR: invalid value for parameter default_text_search_config: "no_such_config" set check_function_bodies = off; create function func_with_bad_set() returns int as $$ select 1 $$ language sql set default_text_search_config = no_such_config; NOTICE: text search configuration "no_such_config" does not exist select func_with_bad_set(); -ERROR: invalid value for parameter "default_text_search_config": "no_such_config" +ERROR: invalid value for parameter default_text_search_config: "no_such_config" reset check_function_bodies; set default_with_oids to f; -- Should not allow to set it to true. diff --git a/src/test/regress/expected/password.out b/src/test/regress/expected/password.out index 924d6e0..752cffc 100644 --- a/src/test/regress/expected/password.out +++ b/src/test/regress/expected/password.out @@ -3,10 +3,10 @@ -- -- Tests for GUC password_encryption SET password_encryption = 'novalue'; -- error -ERROR: invalid value for parameter "password_encryption": "novalue" +ERROR: invalid value for parameter password_encryption: "novalue" HINT: Available values: md5, scram-sha-256. SET password_encryption = true; -- error -ERROR: invalid value for parameter "password_encryption": "true" +ERROR: invalid value for parameter password_encryption: "true" HINT: Available values: md5, scram-sha-256. SET password_encryption = 'md5'; -- ok SET password_encryption = 'scram-sha-256'; -- ok diff --git a/src/test/regress/expected/subscription.out b/src/test/regress/expected/subscription.out index b15eddb..8d9229a 100644 --- a/src/test/regress/expected/subscription.out +++ b/src/test/regress/expected/subscription.out @@ -220,7 +220,7 @@ RESET ROLE; ALTER SUBSCRIPTION regress_testsub RENAME TO regress_testsub_foo; ALTER SUBSCRIPTION regress_testsub_foo SET (synchronous_commit = local); ALTER SUBSCRIPTION regress_testsub_foo SET (synchronous_commit = foobar); -ERROR: invalid value for parameter "synchronous_commit": "foobar" +ERROR: invalid value for parameter synchronous_commit: "foobar" HINT: Available values: local, remote_write, remote_apply, on, off. \dRs+ List of subscriptions diff --git a/src/test/regress/expected/transactions.out b/src/test/regress/expected/transactions.out index 7f5757e..5939ad4 100644 --- a/src/test/regress/expected/transactions.out +++ b/src/test/regress/expected/transactions.out @@ -53,7 +53,7 @@ SELECT COUNT(*) FROM xacttest; (1 row) RESET transaction_isolation; -- error -ERROR: parameter "transaction_isolation" cannot be reset +ERROR: parameter transaction_isolation cannot be reset END; BEGIN TRANSACTION READ ONLY; SELECT COUNT(*) FROM xacttest; @@ -63,7 +63,7 @@ SELECT COUNT(*) FROM xacttest; (1 row) RESET transaction_read_only; -- error -ERROR: parameter "transaction_read_only" cannot be reset +ERROR: parameter transaction_read_only cannot be reset END; BEGIN TRANSACTION DEFERRABLE; SELECT COUNT(*) FROM xacttest; @@ -73,11 +73,11 @@ SELECT COUNT(*) FROM xacttest; (1 row) RESET transaction_deferrable; -- error -ERROR: parameter "transaction_deferrable" cannot be reset +ERROR: parameter transaction_deferrable cannot be reset END; CREATE FUNCTION errfunc() RETURNS int LANGUAGE SQL AS 'SELECT 1' SET transaction_read_only = on; -- error -ERROR: parameter "transaction_read_only" cannot be set locally in functions +ERROR: parameter transaction_read_only cannot be set locally in functions -- Read-only tests CREATE TABLE writetest (a int); CREATE TEMPORARY TABLE temptest (a int); -- 1.8.3.1