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)?