Re: Order changes in PG16 since ICU introduction
Tom Lane <tgl@sss.pgh.pa.us>
Jeff Davis <pgsql@j-davis.com> writes: > I have a couple ideas: > 1. Introduce a "none" provider to separate the concept of C/POSIX > locales from the libc provider. It's not really using a provider > anyway, it's just using memcmp(), and I think it causes confusion to > combine them. Saying "LOCALE_PROVIDER=none" is less error-prone than > "LOCALE_PROVIDER=libc LOCALE='C'". I think I might like this idea, except for one thing: you're imagining that the locale doesn't control anything except string comparisons. What about to_upper/to_lower, character classifications in regexes, etc? (I'm not sure whether those operations can get redirected to ICU today or whether they still always go to libc, but we'll surely want to fix it eventually if the latter is still true.) In any case, that seems somewhat orthogonal to what we're on about here, which is making the behavior of CREATE DATABASE less surprising and more backwards-compatible. I'm not sure that provider=none can help with that. Aside from the user-surprise issues discussed up to now, pg_dump scripts emitted by pre-v15 pg_dump are not going to contain LOCALE_PROVIDER clauses in CREATE DATABASE, and people are going to be very unhappy if that means they suddenly get totally different locale semantics after restoring into a new DB. I think we need some plan for mapping libc-style locale specs into ICU locales so that we can make that more nearly transparent. > 2. Change the CREATE DATABASE syntax to catch these errors better at > the possible expense of backwards compatibility. That is the exact opposite of what I think we need. Backwards compatibility isn't optional. Maybe this means we are not ready to do ICU-by-default in v16. It certainly feels like there might be more here than we want to start designing post-feature-freeze. regards, tom lane
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