postgres.git / summary / log / commit / refs
commit a2caf182a2edcee7b1c00036b7dba6762941473c
Author: Peter Eisentraut <peter@eisentraut.org>
Date: Mon Aug 22 13:31:50 2022 +0000
Fix assertion failure in CREATE DATABASE
An assertion would fail when creating a database with libc locale
provider from a template database with icu locale provider.
Reported-by: Marina Polyakova <m.polyakova@postgrespro.ru>
Reviewed-by: Julien Rouhaud <rjuju123@gmail.com>
Discussion: https://www.postgresql.org/message-id/flat/f385ba25e7f8be427b8c582e5cca7d79%40postgrespro.ru#515a31c5429d6d37ad1d5c9d66962a1e
src/backend/commands/dbcommands.c | 4 ++--
src/bin/scripts/t/020_createdb.pl | 9 +++++++++
2 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/src/backend/commands/dbcommands.c b/src/backend/commands/dbcommands.c
index 6f836865e15..e2c1ac0df73 100644
--- a/src/backend/commands/dbcommands.c
+++ b/src/backend/commands/dbcommands.c
@@ -1011,10 +1011,10 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt)
dbcollate = src_collate;
if (dbctype == NULL)
dbctype = src_ctype;
- if (dbiculocale == NULL)
- dbiculocale = src_iculocale;
if (dblocprovider == '\0')
dblocprovider = src_locprovider;
+ if (dbiculocale == NULL && dblocprovider == COLLPROVIDER_ICU)
+ dbiculocale = src_iculocale;
/* Some encodings are client only */
if (!PG_VALID_BE_ENCODING(encoding))
diff --git a/src/bin/scripts/t/020_createdb.pl b/src/bin/scripts/t/020_createdb.pl
index 78733f64d25..e91c1d013d0 100644
--- a/src/bin/scripts/t/020_createdb.pl
+++ b/src/bin/scripts/t/020_createdb.pl
@@ -49,6 +49,15 @@ if ($ENV{with_icu} eq 'yes')
'--icu-locale=@colNumeric=lower', 'foobarX'
],
'fails for invalid ICU locale');
+
+ # additional node, which uses the icu provider
+ my $node2 = PostgreSQL::Test::Cluster->new('icu');
+ $node2->init(extra => ['--locale-provider=icu', '--icu-locale=en']);
+ $node2->start;
+
+ $node2->command_ok(
+ [ 'createdb', '-T', 'template0', '--locale-provider=libc', 'foobar55' ],
+ 'create database with libc provider from template database with icu provider');
}
else
{
[parent: 3725b7f3c93e]