From bb3ca232398658291d4b1eaae12cd6e88dfc96a3 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Tue, 23 Apr 2024 11:52:40 -0400 Subject: [PATCH] Improve "out of range" error messages for GUCs. If the GUC has a unit, label the minimum and maximum values with the unit explicitly. Per suggestion from Jian He. Discussion: https://postgr.es/m/CACJufxFJo6FyVg9W8yvNAxbjP+EJ9wieE9d9vw5LpPzyLnLLOQ@mail.gmail.com --- src/backend/utils/misc/guc.c | 30 ++++++++++++++++++++---------- src/test/regress/expected/guc.out | 2 +- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/src/backend/utils/misc/guc.c b/src/backend/utils/misc/guc.c index f51b3e0b50..3fb6803998 100644 --- a/src/backend/utils/misc/guc.c +++ b/src/backend/utils/misc/guc.c @@ -3173,15 +3173,20 @@ parse_and_validate_value(struct config_generic *record, if (newval->intval < conf->min || newval->intval > conf->max) { const char *unit = get_config_unit_name(conf->gen.flags); + const char *unitspace; + + if (unit) + unitspace = " "; + else + unit = unitspace = ""; ereport(elevel, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("%d%s%s is outside the valid range for parameter \"%s\" (%d .. %d)", - newval->intval, - unit ? " " : "", - unit ? unit : "", + errmsg("%d%s%s is outside the valid range for parameter \"%s\" (%d%s%s .. %d%s%s)", + newval->intval, unitspace, unit, name, - conf->min, conf->max))); + conf->min, unitspace, unit, + conf->max, unitspace, unit))); return false; } @@ -3209,15 +3214,20 @@ parse_and_validate_value(struct config_generic *record, if (newval->realval < conf->min || newval->realval > conf->max) { const char *unit = get_config_unit_name(conf->gen.flags); + const char *unitspace; + + if (unit) + unitspace = " "; + else + unit = unitspace = ""; ereport(elevel, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), - errmsg("%g%s%s is outside the valid range for parameter \"%s\" (%g .. %g)", - newval->realval, - unit ? " " : "", - unit ? unit : "", + errmsg("%g%s%s is outside the valid range for parameter \"%s\" (%g%s%s .. %g%s%s)", + newval->realval, unitspace, unit, name, - conf->min, conf->max))); + conf->min, unitspace, unit, + conf->max, unitspace, unit))); return false; } diff --git a/src/test/regress/expected/guc.out b/src/test/regress/expected/guc.out index 127c953297..455b6d6c0c 100644 --- a/src/test/regress/expected/guc.out +++ b/src/test/regress/expected/guc.out @@ -510,7 +510,7 @@ SELECT '2006-08-13 12:34:56'::timestamptz; SET seq_page_cost TO '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 ms .. 100 ms) SET no_such_variable TO 42; ERROR: unrecognized configuration parameter "no_such_variable" -- Test "custom" GUCs created on the fly (which aren't really an