]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Don't copy datlocale from template unless provider matches.
authorJeff Davis <jdavis@postgresql.org>
Tue, 5 Aug 2025 16:06:05 +0000 (09:06 -0700)
committerJeff Davis <jdavis@postgresql.org>
Tue, 5 Aug 2025 16:25:23 +0000 (09:25 -0700)
During CREATE DATABASE, if changing the locale provider, require that
a new locale is specified rather than trying to reinterpret the
template's locale using the new provider.

This only affects the behavior when the template uses the builtin
provider and CREATE DATABASE specifies the ICU provider without
specifying the locale. Previously, that may have succeeded due to
loose validation by ICU, whereas now that will cause an error. Because
it can cause an error, backport only to unreleased versions.

Discussion: https://postgr.es/m/5038b33a6dc639009f4b3d43fa6ae0c5ba9e04f7.camel@j-davis.com
Backpatch-through: 18

src/backend/commands/dbcommands.c

index 502a45163c8aeea1b15635f8ea6f3999dfb94184..92a396b8406a3131b59b2026be869eb3cade630e 100644 (file)
@@ -1052,7 +1052,7 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt)
                dbctype = src_ctype;
        if (dblocprovider == '\0')
                dblocprovider = src_locprovider;
-       if (dblocale == NULL)
+       if (dblocale == NULL && dblocprovider == src_locprovider)
                dblocale = src_locale;
        if (dbicurules == NULL)
                dbicurules = src_icurules;