Re: Order changes in PG16 since ICU introduction
Jeff Davis <pgsql@j-davis.com>
Attachments
- v3-0001-ICU-do-not-convert-locale-C-to-en-US-u-va-posix.patch (text/x-patch) patch v3-0001
- v3-0002-ICU-support-locale-C-with-the-same-behavior-as-li.patch (text/x-patch) patch v3-0002
- v3-0003-ICU-fix-up-old-libc-style-locale-strings.patch (text/x-patch) patch v3-0003
- v3-0004-Make-LOCALE-apply-to-ICU_LOCALE-for-CREATE-DATABA.patch (text/x-patch) patch v3-0004
On Thu, 2023-04-27 at 14:23 +0200, Daniel Verite wrote: > This should be pg_strcasecmp(...) == 0 Good catch, thank you! Fixed in updated patches. > postgres=# create database lat9 locale 'fr_FR@euro' encoding LATIN9 > template > 'template0'; > ERROR: could not convert locale name "fr_FR@euro" to language tag: > U_ILLEGAL_ARGUMENT_ERROR ICU 63 and earlier convert it without error to the language tag 'fr-FR- u-cu-eur', which is correct. ICU 64 removed support for transforming some locale variants, because apparently they think those variants are obsolete: https://unicode-org.atlassian.net/browse/ICU-22268 https://unicode-org.atlassian.net/browse/ICU-20187 (Aside: how obsolete are those variants?) It's frustrating that they'd remove such transformations from the canonicalization process. Fortunately, it looks like it's easy enough to do the transformation ourselves. The only problematic format is '...@VARIANT'. The other format 'fr_FR_EURO' doesn't seem to be a valid glibc locale name[1] and windows seems to use BCP 47[2]. And there don't seem to be a lot of variants to handle. ICU 63 only handles 3 variants, so that's what my patch does. Any unknown variant between 5 and 8 characters won't throw an error. There could be more problem cases, but I'm not sure how much of a practical problem they are. If we try to keep the meaning of LOCALE to only LC_COLLATE and LC_CTYPE, that will continue to be confusing for anyone that uses provider=icu. Regards, Jeff Davis [1] https://www.gnu.org/software/libc/manual/html_node/Locale-Names.html [2] https://learn.microsoft.com/en-us/windows/win32/intl/locale-names
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