From: Julien Rouhaud <rjuju123@gmail.com>
To: Peter Eisentraut <peter.eisentraut@enterprisedb.com>
Cc: pgsql-hackers <pgsql-hackers@postgresql.org>
Cc: Daniel Verite <daniel@manitou-mail.org>
Subject: Re: ICU for global collation
Date: Tue, 4 Jan 2022 10:21:04 +0800
Message-ID: <YdOvEAFGbfGY/47A@jrouhaud> (raw)
In-Reply-To: <525ef44f-52bf-505f-a491-07835d039424@enterprisedb.com>
References: <374f8048-9d87-462c-a8aa-d02ffca6525f@manitou-mail.org>
<d7060bf1-177c-e0f2-f13f-b857cdd1182e@2ndquadrant.com>
<525ef44f-52bf-505f-a491-07835d039424@enterprisedb.com>
Hi,
On Thu, Dec 30, 2021 at 01:07:21PM +0100, Peter Eisentraut wrote:
>
> So this is a different approach: If you choose ICU as the default locale for
> a database, you still need to specify lc_ctype and lc_collate settings, as
> before. Unlike in the previous patch, where the ICU collation name was
> written in datcollate, there is now a third column (daticucoll), so we can
> store all three values. This fixes the described problem. Other than that,
> once you get all the initial settings right, it basically just works: The
> places that have ICU support now will use a database-wide ICU collation if
> appropriate, the places that don't have ICU support continue to use the
> global libc locale settings.
That looks sensible to me.
> @@ -2774,6 +2776,7 @@ dumpDatabase(Archive *fout)
> appendPQExpBuffer(dbQry, "SELECT tableoid, oid, datname, "
> "(%s datdba) AS dba, "
> "pg_encoding_to_char(encoding) AS encoding, "
> + "datcollprovider, "
This needs to be in a new pg 15+ branch, not in the pg 9.3+.
> - if (!lc_collate_is_c(collid) && collid != DEFAULT_COLLATION_OID)
> - mylocale = pg_newlocale_from_collation(collid);
> + if (!lc_collate_is_c(collid))
> + {
> + if (collid != DEFAULT_COLLATION_OID)
> + mylocale = pg_newlocale_from_collation(collid);
> + else if (default_locale.provider == COLLPROVIDER_ICU)
> + mylocale = &default_locale;
> + }
There are really a lot of places with this new code. Maybe it could be some
new function/macro to wrap that for the normal case (e.g. not formatting.c)?
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Reply to all the recipients using the --to and --cc options:
reply via email
To: pgsql-hackers@postgresql.org
Cc: rjuju123@gmail.com, peter.eisentraut@enterprisedb.com, daniel@manitou-mail.org
Subject: Re: ICU for global collation
In-Reply-To: <YdOvEAFGbfGY/47A@jrouhaud>
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
This inbox is served by DDX for PostgreSQL; see mirroring instructions
for how to clone and mirror all data and code used for this inbox