Re: Collation version tracking for macOS
Thomas Munro <thomas.munro@gmail.com>
From: Thomas Munro <thomas.munro@gmail.com>
To: Peter Geoghegan <pg@bowt.ie>
Cc: "Finnerty, Jim" <jfinnert@amazon.com>, "Nasby, Jim" <nasbyj@amazon.com>,
Tom Lane <tgl@sss.pgh.pa.us>, Jeremy Schneider <schneider@ardentperf.com>, Peter Eisentraut <peter.eisentraut@enterprisedb.com>, pgsql-hackers <pgsql-hackers@postgresql.org>
Date: 2022-06-12T03:18:15Z
Lists: pgsql-hackers
Commits
Same data as JSON:
GET /api/v1/messages/:b64id/commits
the thread's linked commits as JSON, with link sources.
API reference →
-
Fix copy&paste typo in comment
- 402388946fb3 17.0 cited
Attachments
- v4-0001-WIP-multi-ICU-distinct-collations.patch (text/x-patch) patch v4-0001
On Sun, Jun 12, 2022 at 11:59 AM Thomas Munro <thomas.munro@gmail.com> wrote: > > On Sat, Jun 11, 2022 at 4:21 PM Peter Geoghegan <pg@bowt.ie> wrote: > > What about "time travel collations", but without the time travel part? > > That is, what about supporting multiple ICU versions per cluster, but > > not per database? So you could upgrade the OS and Postgres, using > > standard packages that typically just use the latest ICU version -- > > typically, but not always. If you happen to have been on an older > > version of ICU on upgrade, then that version of ICU will still work at > > the level of a whole database -- your database. Maybe you can create > > new databases with old and new ICU versions if you want to. > > > > That obviously runs into the problem of needing to eventually do a > > dump and reload -- but I suppose that "eventually" could be a very > > long time. At least the OS package doesn't declare one version of ICU > > the blessed version, now and forever, effectively vendoring ICU in a > > backdoor fashion. At least old databases have significant runway, > > while at the same time new databases that want to use the same > > standard Postgres package aren't forced to use the same ancient ICU > > version. > > Hmm. I think that's effectively what you'd get using my "distinct > collation" patch (v1, or this much better v3, attached), if you put > version prefixes in colliculocale, and updated them in the template > database after an OS upgrade to affect new databases. I realise you > probably mean something a little more automatic... Thinking some more about what you said above: really, most people only care about the default collation. I'm not yet sure what I think initdb should put into pg_collation when importing the initial set of collation objects in the "distinct" world (perhaps an un-prefixed and a prefixed variant of each, with names ending -x-icu and -x-icu63?), but as for the default collation, I should point out that the "distinct" patch already gives you a nailed-to-the-ground database approximately as you described above if you just do something like this: postgres=# create database db2 locale_provider = icu icu_locale = '67:en' template = template0 ...; Small bugfix attached (v3 was accidentally calling uiter_setUTF8() and u_errorName() directly in a couple of places).