Re: Collation version tracking for macOS
От | Thomas Munro |
---|---|
Тема | Re: Collation version tracking for macOS |
Дата | |
Msg-id | CA+hUKGJbRBbDHsp6erRpckDa41mH+0UHsTqd1MZSpZVi-mj55A@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: Collation version tracking for macOS (Peter Geoghegan <pg@bowt.ie>) |
Ответы |
Re: Collation version tracking for macOS
Re: Collation version tracking for macOS |
Список | pgsql-hackers |
On Wed, Jun 8, 2022 at 12:23 PM Peter Geoghegan <pg@bowt.ie> wrote: > ISTM that there are two mostly-distinct questions here: > > 1. How do we link to multiple versions of ICU at the same time, in a > way that is going to work smoothly on mainstream platforms? > > 2. What semantics around collations do we want for Postgres once we > gain the ability to use multiple versions of ICU at the same time? For > example, do we want to generalize the definition of a collation, so > that it's associated with one particular ICU version and collation for > the purposes of on-disk compatibility, but isn't necessarily tied to > the same ICU version in other contexts, such as on a dump and restore? Yeah. Well I couldn't resist doing some (very!) experimental hacking. See attached. The idea of putting a raw library name in there is just a straw-man, and I already found a major problem with it: I also need to get my hands on u_strToLower and friends for formatting.c, but those functions are in a different library that needs to be dlopen'd separately, so we need *two* names. That's not done in the attached patch, but at least this demonstrates some of the mechanics of a dlopen() based solution that can do the collating part... of course there are all kinds of problems apparent (security of loading arbitrary libraries, API stability, interaction with the "default" ICU that our binary is linked against, creation of initial set of collations in initdb, naming, upgrades, ...). Demo: $ sudo apt-get install libicu63 libicu67 postgres=# create schema icu63; CREATE SCHEMA postgres=# create schema icu67; CREATE SCHEMA postgres=# create collation icu63."en-US-x-icu" (provider = icu, locale = 'libicui18n.so.63:en-US'); CREATE COLLATION postgres=# create collation icu67."en-US-x-icu" (provider = icu, locale = 'libicui18n.so.67:en-US'); CREATE COLLATION postgres=# select collname, collnamespace::regnamespace, colliculocale, collversion from pg_collation where collname = 'en-US-x-icu'; collname | collnamespace | colliculocale | collversion -------------+---------------+------------------------+------------- en-US-x-icu | pg_catalog | en-US | 153.14 en-US-x-icu | icu63 | libicui18n.so.63:en-US | 153.88 en-US-x-icu | icu67 | libicui18n.so.67:en-US | 153.14 (3 rows) postgres=# select relname from pg_class order by relname collate icu63."en-US-x-icu" limit 2; relname --------------------------- _pg_foreign_data_wrappers _pg_foreign_servers (2 rows)
Вложения
В списке pgsql-hackers по дате отправления: