mirror of
https://github.com/postgres/postgres.git
synced 2025-06-13 07:41:39 +03:00
Improve CREATE DATABASE error message for invalid libc locale.
Discussion: https://postgr.es/m/73959a14-267b-49c1-8293-291b175682cb@manitou-mail.org Reviewed-by: Daniel Verite <daniel@manitou-mail.org>
This commit is contained in:
@ -1065,16 +1065,41 @@ createdb(ParseState *pstate, const CreatedbStmt *stmt)
|
||||
|
||||
/* Check that the chosen locales are valid, and get canonical spellings */
|
||||
if (!check_locale(LC_COLLATE, dbcollate, &canonname))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("invalid LC_COLLATE locale name: \"%s\"", dbcollate),
|
||||
errhint("If the locale name is specific to ICU, use ICU_LOCALE.")));
|
||||
{
|
||||
if (dblocprovider == COLLPROVIDER_BUILTIN)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("invalid LC_COLLATE locale name: \"%s\"", dbcollate),
|
||||
errhint("If the locale name is specific to the builtin provider, use BUILTIN_LOCALE.")));
|
||||
else if (dblocprovider == COLLPROVIDER_ICU)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("invalid LC_COLLATE locale name: \"%s\"", dbcollate),
|
||||
errhint("If the locale name is specific to the ICU provider, use ICU_LOCALE.")));
|
||||
else
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("invalid LC_COLLATE locale name: \"%s\"", dbcollate)));
|
||||
}
|
||||
dbcollate = canonname;
|
||||
if (!check_locale(LC_CTYPE, dbctype, &canonname))
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("invalid LC_CTYPE locale name: \"%s\"", dbctype),
|
||||
errhint("If the locale name is specific to ICU, use ICU_LOCALE.")));
|
||||
{
|
||||
if (dblocprovider == COLLPROVIDER_BUILTIN)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("invalid LC_CTYPE locale name: \"%s\"", dbctype),
|
||||
errhint("If the locale name is specific to the builtin provider, use BUILTIN_LOCALE.")));
|
||||
else if (dblocprovider == COLLPROVIDER_ICU)
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("invalid LC_CTYPE locale name: \"%s\"", dbctype),
|
||||
errhint("If the locale name is specific to the ICU provider, use ICU_LOCALE.")));
|
||||
else
|
||||
ereport(ERROR,
|
||||
(errcode(ERRCODE_WRONG_OBJECT_TYPE),
|
||||
errmsg("invalid LC_CTYPE locale name: \"%s\"", dbctype)));
|
||||
}
|
||||
|
||||
dbctype = canonname;
|
||||
|
||||
check_encoding_locale_matches(encoding, dbcollate, dbctype);
|
||||
|
Reference in New Issue
Block a user