From 148f66d59e2c2fa8bc79918973874e2803892664 Mon Sep 17 00:00:00 2001 From: Peter Eisentraut Date: Fri, 16 Sep 2022 09:37:54 +0200 Subject: Don't allow creation of database with ICU locale with unsupported encoding Check in CREATE DATABASE and initdb that the selected encoding is supported by ICU. Before, they would pass but users would later get an error from the server when they tried to use the database. Also document that initdb sets the encoding to UTF8 by default if the ICU locale provider is chosen. Author: Marina Polyakova Reviewed-by: Kyotaro Horiguchi Discussion: https://www.postgresql.org/message-id/6dd6db0984d86a51b7255ba79f111971@postgrespro.ru --- src/backend/commands/dbcommands.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/backend/commands/dbcommands.c') diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c index 59e217b9f9d..cba929b7f99 100644 --- a/src/backend/commands/dbcommands.c +++ b/src/backend/commands/dbcommands.c @@ -1033,6 +1033,12 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt) if (dblocprovider == COLLPROVIDER_ICU) { + if (!(is_encoding_supported_by_icu(encoding))) + ereport(ERROR, + (errcode(ERRCODE_INVALID_PARAMETER_VALUE), + errmsg("encoding \"%s\" is not supported with ICU provider", + pg_encoding_to_char(encoding)))); + /* * This would happen if template0 uses the libc provider but the new * database uses icu. @@ -1041,10 +1047,9 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt) ereport(ERROR, (errcode(ERRCODE_INVALID_PARAMETER_VALUE), errmsg("ICU locale must be specified"))); - } - if (dblocprovider == COLLPROVIDER_ICU) check_icu_locale(dbiculocale); + } /* * Check that the new encoding and locale settings match the source -- cgit v1.2.3