Re: Order changes in PG16 since ICU introduction
Jeff Davis <pgsql@j-davis.com>
Attachments
- v9-0001-ICU-support-locale-C-with-the-same-behavior-as-li.patch (text/x-patch) patch v9-0001
- v9-0002-pg_upgrade-check-for-ICU-locale-C-in-versions-15-.patch (text/x-patch) patch v9-0002
- v9-0003-Make-LOCALE-apply-to-ICU_LOCALE-for-CREATE-DATABA.patch (text/x-patch) patch v9-0003
- v9-0004-Use-database-default-collation-s-provider-as-defa.patch (text/x-patch) patch v9-0004
On Tue, 2023-06-06 at 15:09 +0200, Daniel Verite wrote: > FWIW I don't quite see how 0001 improve things or what problem it's > trying to solve. The word "locale" is generic, so we need to make LOCALE/--locale apply to whatever provider is being used. If "locale" only applies to libc, using ICU will always be confusing and never be on the same level as libc, let alone the preferred provider. The locale "C" is a special case, documented as a non-locale. So, if LOCALE/--locale apply to ICU, then either ICU needs to handle locale "C" in the expected way (v8 patch series); or when we see locale "C" we need to somehow change the provider into something that can handle it (v6 patch series changes it to the "none" provider). Please let me know if you disagree with the goal or the reasoning here. If so, please explain where you think we should end up, because the status quo does not seem great to me. > 0001 creates exceptions throughout the code so that when an ICU > collation has a locale name "C" or "POSIX" then it does not behave > like an ICU collation, even though pg_collation.collprovider='i' > To me it's neither desirable nor necessary that a collation that > has collprovider='i' is diverted to non-ICU semantics. It's not very principled, but it matches what libc does. > Also in the current state, this diversion does not apply to initdb. > > "initdb --icu-locale=C" with 0001 applied reports this: > > Using language tag "en-US-u-va-posix" for ICU locale "C". Thank you. I fixed it by skipping the canonicalization for C/POSIX locales in initdb. > Could you elaborate a bit more on what 0001 is meant to achieve, from > the point of view of the user? It makes it so the user consistently (regardless of the provider) gets the "no locale" behavior (as documented and historically expected) when they specify the C or POSIX locales. Then that enables us to change LOCALE/--locale to apply to ICU, which means that a simple command like "initdb --locale=en_US" does a sensible thing regardless of the default provider. I understand you are skeptical of trying to apply an arbitrary locale name to ICU, but if they don't specify the provider, what do you expect to happen? -- Jeff Davis PostgreSQL Contributor Team - AWS
Commits
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Introduce "builtin" collation provider.
- 2d819a08a1cb 17.0 landed
-
ICU: do not convert locale 'C' to 'en-US-u-va-posix'.
- f3a01af29b19 16.0 landed
- f7faa9976cc0 16.0 landed
-
initdb: change default --locale-provider back to libc.
- 2535c74b1a61 16.0 landed
-
CREATE DATABASE: make LOCALE apply to all collation providers.
- a14e75eb0b6a 16.0 landed
-
Remove read-only server settings lc_collate and lc_ctype
- b0f6c437160d 16.0 landed
-
ICU: use uloc_getDefault() for initdb.
- ec1264f01e37 16.0 landed
-
Doc fixes for commit 1e16af8ab5.
- f4a9422c0c37 16.0 landed
-
Doc: fix some rendering problems in the PDF docs build.
- b62381d9a23b 16.0 landed
-
Doc improvements for language tags and custom ICU collations.
- 1e16af8ab5d7 16.0 landed
-
ICU: check for U_STRING_NOT_TERMINATED_WARNING.
- 1c634f6647c2 16.0 landed
-
Reduce icu_validation_level default to WARNING.
- 6de31ce446e5 16.0 landed
-
Revert "ICU: do not convert locale 'C' to 'en-US-u-va-posix'."
- 455f948b0d03 16.0 landed
-
Fix initdb --no-locale.
- 5cd1a5af4d17 16.0 landed
-
Avoid character classification in regex escape parsing.
- c04c6c5d6f5f 16.0 cited