diff options
author | Jeff Davis <jdavis@postgresql.org> | 2023-03-28 16:15:59 -0700 |
---|---|---|
committer | Jeff Davis <jdavis@postgresql.org> | 2023-03-28 16:34:29 -0700 |
commit | 1671f990dd669c0b72e45c7bef0fd579a10676ed (patch) | |
tree | 002e9ca8c4cd35b2f641de6c308f78b701f3b21a /src/backend/utils/misc/guc_tables.c | |
parent | b7cea58822c67724effc711ae28e4077a01a7cd6 (diff) | |
download | postgresql-1671f990dd669c0b72e45c7bef0fd579a10676ed.tar.gz postgresql-1671f990dd669c0b72e45c7bef0fd579a10676ed.zip |
Validate ICU locales.
For ICU collations, ensure that the locale's language exists in ICU,
and that the locale can be opened.
Basic validation helps avoid minor mistakes and misspellings, which
often fall back to the root locale instead of the intended
locale. It's even more important to avoid such mistakes in ICU
versions 54 and earlier, where the same (misspelled) locale string
could fall back to different locales depending on the environment.
Discussion: https://postgr.es/m/11b1eeb7e7667fdd4178497aeb796c48d26e69b9.camel@j-davis.com
Discussion: https://postgr.es/m/df2efad0cae7c65180df8e5ebb709e5eb4f2a82b.camel@j-davis.com
Reviewed-by: Peter Eisentraut
Diffstat (limited to 'src/backend/utils/misc/guc_tables.c')
-rw-r--r-- | src/backend/utils/misc/guc_tables.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/src/backend/utils/misc/guc_tables.c b/src/backend/utils/misc/guc_tables.c index a60bd48499e..8062589efd5 100644 --- a/src/backend/utils/misc/guc_tables.c +++ b/src/backend/utils/misc/guc_tables.c @@ -166,6 +166,22 @@ static const struct config_enum_entry intervalstyle_options[] = { {NULL, 0, false} }; +static const struct config_enum_entry icu_validation_level_options[] = { + {"disabled", -1, false}, + {"debug5", DEBUG5, false}, + {"debug4", DEBUG4, false}, + {"debug3", DEBUG3, false}, + {"debug2", DEBUG2, false}, + {"debug1", DEBUG1, false}, + {"debug", DEBUG2, true}, + {"log", LOG, false}, + {"info", INFO, true}, + {"notice", NOTICE, false}, + {"warning", WARNING, false}, + {"error", ERROR, false}, + {NULL, 0, false} +}; + StaticAssertDecl(lengthof(intervalstyle_options) == (INTSTYLE_ISO_8601 + 2), "array length mismatch"); @@ -4644,6 +4660,16 @@ struct config_enum ConfigureNamesEnum[] = }, { + {"icu_validation_level", PGC_USERSET, CLIENT_CONN_LOCALE, + gettext_noop("Log level for reporting invalid ICU locale strings."), + NULL + }, + &icu_validation_level, + ERROR, icu_validation_level_options, + NULL, NULL, NULL + }, + + { {"log_error_verbosity", PGC_SUSET, LOGGING_WHAT, gettext_noop("Sets the verbosity of logged messages."), NULL |