Improve ICU option handling in CREATE DATABASE
We check that the ICU locale is only specified if the ICU locale provider is selected. But we did that too early. We need to wait until we load the settings of the template database, since that could also set what the locale provider is. Reported-by: Marina Polyakova <m.polyakova@postgrespro.ru> Discussion: https://www.postgresql.org/message-id/9ba4cd1ea6ed6b7b15c0ff15e6f540cd@postgrespro.ru
This commit is contained in:
parent
2da8c4cff3
commit
e59a67fb8f
@ -908,10 +908,6 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt)
|
||||
errmsg("unrecognized locale provider: %s",
|
||||
locproviderstr)));
|
||||
}
|
||||
if (diculocale && dblocprovider != COLLPROVIDER_ICU)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
|
||||
errmsg("ICU locale cannot be specified unless locale provider is ICU")));
|
||||
if (distemplate && distemplate->arg)
|
||||
dbistemplate = defGetBoolean(distemplate);
|
||||
if (dallowconnections && dallowconnections->arg)
|
||||
@ -1051,6 +1047,13 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt)
|
||||
|
||||
check_icu_locale(dbiculocale);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dbiculocale)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_INVALID_OBJECT_DEFINITION),
|
||||
errmsg("ICU locale cannot be specified unless locale provider is ICU")));
|
||||
}
|
||||
|
||||
/*
|
||||
* Check that the new encoding and locale settings match the source
|
||||
|
@ -71,6 +71,10 @@ if ($ENV{with_icu} eq 'yes')
|
||||
$node2->command_ok(
|
||||
[ 'createdb', '-T', 'template0', '--locale-provider=libc', 'foobar55' ],
|
||||
'create database with libc provider from template database with icu provider');
|
||||
|
||||
$node2->command_ok(
|
||||
[ 'createdb', '-T', 'template0', '--icu-locale', 'en-US', 'foobar56' ],
|
||||
'create database with icu locale from template database with icu provider');
|
||||
}
|
||||
else
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user