public inbox for [email protected]
help / color / mirror / Atom feedFrom: Todd Lang <[email protected]>
To: [email protected] <[email protected]>
Subject: Supporting non-deterministic collations with tailoring rules.
Date: Tue, 23 Sep 2025 14:51:28 +0000
Message-ID: <YT2PPF959236618377A072745A280E278F4BE1DA@YT2PPF959236618.CANPRD01.PROD.OUTLOOK.COM> (raw)
In-Reply-To: <YT2PPF9592366185171DCEA6B42707B0B05BE1DA@YT2PPF959236618.CANPRD01.PROD.OUTLOOK.COM>
References: <YT2PPF9592366185171DCEA6B42707B0B05BE1DA@YT2PPF959236618.CANPRD01.PROD.OUTLOOK.COM>
Reposting this here from the Discord server as requested:
When creating a collation, in https://github.com/postgres/postgres/blob/master/src/backend/utils/adt/pg_locale_icu.c#L461 it is opening the collator with the tailoring rules supplied. However, it has hardcoded the strength level UCOL_DEFAULT_STRENGTH. This has the effect of ignoring the "deterministic=false" you may have specified in your CREATE COLLATION call. If, instead of UCOL_DEFAULT_STRENGTH, the code understood the deterministic parameter and passed either UCOL_PRIMARY for "deterministic=true", and UCOL_SECONDARY for "deterministic=false", this would preserve the attempt to obtain case-insensitivity in the locale while simultaneously allowing tailoring as expected.
I have made the modification to the pg_locale_icu.c and tested it locally (simply hardcoding UCOL_SECONDARY - not checking the deterministic parameter) and it behaves as expected, though I freely admit my knowledge of ICU intersecting with Postgres is rather limited.
view thread (9+ 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: Supporting non-deterministic collations with tailoring rules.
In-Reply-To: <YT2PPF959236618377A072745A280E278F4BE1DA@YT2PPF959236618.CANPRD01.PROD.OUTLOOK.COM>
* 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