Re: ICU for global collation
Kyotaro Horiguchi <horikyota.ntt@gmail.com>
At Fri, 16 Sep 2022 09:49:28 +0300, Marina Polyakova <m.polyakova@postgrespro.ru> wrote in
> On 2022-09-15 09:52, Kyotaro Horiguchi wrote:
> > However, when I reran the command, it complains about incompatible
> > encoding this time. I think it's more user-friendly to check for the
> > encoding compatibility before the check for missing --icu-locale
> > option.
> > regards.
>
> In continuation of options check: AFAICS the following checks in
> initdb
>
> if (locale_provider == COLLPROVIDER_ICU)
> {
> if (!icu_locale)
> pg_fatal("ICU locale must be specified");
>
> /*
> * In supported builds, the ICU locale ID will be checked by the
> * backend during post-bootstrap initialization.
> */
> #ifndef USE_ICU
> pg_fatal("ICU is not supported in this build");
> #endif
> }
>
> are executed approximately when they are executed in create database
> after getting all the necessary data from the template database:
initdb doesn't work that way, but anyway, I realized that I am
proposing to move that code in setlocales() to the caller function as
the result. I don't think setlocales() is the place for the code
because icu locale has no business with what the function does. That
being said there's no obvious reason we *need* to move the code out to
its caller.
> if (dblocprovider == COLLPROVIDER_ICU)
> {
> /*
> * This would happen if template0 uses the libc provider but the new
> * database uses icu.
> */
> if (!dbiculocale)
> ereport(ERROR,
> (errcode(ERRCODE_INVALID_PARAMETER_VALUE),
> errmsg("ICU locale must be specified")));
> }
>
> if (dblocprovider == COLLPROVIDER_ICU)
> check_icu_locale(dbiculocale);
>
> But perhaps the check that --icu-locale cannot be specified unless
> locale provider icu is chosen should also be moved here? So all these
> checks will be in one place and it will use the provider from the
> template database (which could be icu):
>
> $ initdb --locale-provider icu --icu-locale en-US -D data &&
> pg_ctl -D data -l logfile start &&
> createdb --icu-locale ru-RU --template template0 mydb
> ...
> createdb: error: database creation failed: ERROR: ICU locale cannot be
> specified unless locale provider is ICU
And, I realized that this causes bigger churn than I thought. So, I'm
sorry but I withdraw the comment.
Thus the first proposed patch will be more or less the direction we
would go. And the patch looks good to me as a whole.
+ errmsg("encoding \"%s\" is not supported with ICU provider",
+ pg_log_error("encoding \"%s\" is not supported with ICU provider",
+ pg_encoding_to_char(encodingid));
I might be wrong, but the messages look wrong to me. The alternatives
below might work.
"encoding \"%s\" is not supported by ICU"
"encoding \"%s\" cannot be used for/with ICU locales"
+ pg_log_error_hint("Rerun %s and choose a matching combination.",
+ progname);
This doesn't seem to provide users with useful information.
regards.
--
Kyotaro Horiguchi
NTT Open Source Software Center
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Add CHECK_FOR_INTERRUPTS while restoring changes during decoding.
- ce20f8b9f435 16.0 cited
-
Improve ICU option handling in CREATE DATABASE
- e59a67fb8fe1 16.0 landed
- 865b52af6104 15.0 landed
-
Don't allow creation of database with ICU locale with unsupported encoding
- c7db01e325a5 16.0 landed
- 148f66d59e2c 15.0 landed
-
Make locale option behavior more consistent
- da5d4ea5aaac 16.0 landed
- 3e694b318d20 15.0 landed
-
pg_dump: Dump colliculocale
- 72b6828da3f7 15.0 landed
- 396d348b046c 16.0 landed
-
Remove further unwanted linker flags from perl_embed_ldflags
- b4e936859dc4 16.0 cited
-
Doc: document possible need to raise kernel's somaxconn limit.
- 2c63b0930aee 15.0 cited
-
Reduce warnings with -Wshadow=compatible-local builds
- 92fce4e1eda9 16.0 cited
-
Remove redundant spaces in _outA_Expr() output
- 1c5818b9c68e 16.0 cited
-
Fix outdated --help message for postgres -f
- 63b64d827069 14.6 cited
-
pg_upgrade: Fix version comparison for global ICU support
- fa06a34d14ea 15.0 landed
-
Silence -Wmaybe-uninitialized compiler warning in dbcommands.c.
- 97bddda61b9a 15.0 landed
-
Add option to use ICU as global locale provider
- f2553d43060e 15.0 landed
-
DefineCollation() code cleanup
- e94bb1473eb3 15.0 landed
-
Change collate and ctype fields to type text
- 54637508f87b 15.0 landed
-
Call pg_newlocale_from_collation() also with default collation
- b99ccd2cb217 15.0 landed
-
Use libc version as a collation version on glibc systems.
- d5ac14f9ccdd 13.0 cited
-
Silence -Wmaybe-uninitialized compiler warnings in dbcommands.c.
- 3f6b3be39ca9 13.0 cited
-
Make LC_COLLATE and LC_CTYPE database-level settings. Collation and
- 61d967498802 8.4.0 cited