public inbox for [email protected]  
help / color / mirror / Atom feed
From: Rihad <[email protected]>
To: Dominique Devienne <[email protected]>
Cc: pgsql-general General <[email protected]>
Subject: Re: Collation again here
Date: Thu, 8 Jan 2026 17:18:53 +0400
Message-ID: <[email protected]> (raw)
In-Reply-To: <CAFCRh--H4a9kV4R=22DB6cL+KxcJ3A6-3tg_Y77KgTdDJECBwA@mail.gmail.com>
References: <[email protected]>
	<CAFCRh--H4a9kV4R=22DB6cL+KxcJ3A6-3tg_Y77KgTdDJECBwA@mail.gmail.com>

On 1/8/26 4:48 PM, Dominique Devienne wrote:
> On Thu, Jan 8, 2026 at 1:39 PM Rihad<[email protected]> wrote:
>> Hi, guys. Just pg_upgraded our PG from 13.x to 18.1, rebuilt all indexes concurrently and issued  ALTER DATABASE foo REFRESH COLLATION VERSION
>> Everything's fine on the master server, no warnings etc. Then I set up a replica using pg_basebackup, and there when trying to access the DB using psql I get:
>>
>> WARNING:  database "foo" has a collation version mismatch
>> DETAIL:  The database was created using collation version 43.0, but the operating system provides version 34.0.
>> HINT:  Rebuild all objects in this database that use the default collation and run ALTER DATABASE foo REFRESH COLLATION VERSION, or build PostgreSQL with the right library version.
>> The OS are both FreeBSD, but the master runs 14.3, the replica runs 13.5. PostgreSQL packages are built with ICU support by default, the versions used are identical:  icu-76.1
>> Could it be that the OS (libc) needs to be the same version? I hoped it would be enough to use the same ICU.
> Depends what Provider you used in those DBs:
> https://www.postgresql.org/docs/current/locale.html#LOCALE-PROVIDERS
> Having the same ICU is good, but do your DBs use that provider? If
> not, and you're using the libc one, then yes, the libc version
> matters.
> Myself I use the new builtin provider to avoid OS portability issues. --DD

Hi, our locale/collate/whatever is en_US.UTF-8 (as set by these 
pg_upgrade flags: --encoding=utf-8 --locale=en_US.UTF-8)



Looking into pg_collation system table that collation has 
collprovide="c". First I thought "c" meant libc, but this article states 
that "c" means PG Internal provider, and libc would have been "l".

https://medium.com/@adarsh2801/understanding-collations-in-postgresql-648e4fa333e1

 1. */PostgreSQL Internal Provider (‘c’) /*: Introduced in Postgres 15.
    This built-in collation support is System/OS agnostic.
 2. */System Library Provider (‘l’) : /*Uses GNU C library and hence is
    OS locale dependent.
 3. */ICU — International Components for Unicode (‘i’) : /*Uses ICU
    library for unicode-aware collation.


We only have "i" & "c" in pg_collation. And we aren't using any of "i" 
it seems. All this locale/encoding/collate stuff is too much for me to 
handle, sorry)

So if we are using the internal (builtin) "c" provider how come the PG 
18.1 run on FreeBSD 13.5 version shows warnings that the system version 
is 34.0?

The article must be wrong I guess.

Then upgrading 13.5 to 14.3 is our only option.


view thread (4+ messages)  latest in thread

reply

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: [email protected]
  Cc: [email protected], [email protected]
  Subject: Re: Collation again here
  In-Reply-To: <[email protected]>

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

This inbox is served by agora; see mirroring instructions
for how to clone and mirror all data and code used for this inbox