deprecating OS collation & steering toward ICU?

From: Jeremy Schneider <schneider(at)ardentperf(dot)com>
To: "pgsql-hackers(at)lists(dot)postgresql(dot)org" <pgsql-hackers(at)lists(dot)postgresql(dot)org>
Subject: deprecating OS collation & steering toward ICU?
Date: 2025-09-09 20:34:36
Message-ID: 20250909133436.1596d3c7@ardentperf.com
Views: Whole Thread | Raw Message | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

I haven't kept up with all the hackers traffic, so not sure of the
latest with collation stuff. But in a few recent discussions I've
gotten that impression that ICU adoption is pretty low, despite its'
availability across major operating systems.

Curious what people's feelings are about direction with ICU. Do we want
to encourage more people to use it by default, similar to how we do for
LLVM/JIT?

One possibility could be adding a GUC that disables OS collations other
than C collation for CREATE DATABASE (and perhaps for DDL), and having
this be a default behavior. The error message could be a place to
suggest ICU (alongside mentioning the GUC escape hatch).

Blocking at new database creation would mean that in-place upgrades
wouldn't be impacted. DDL is a bit more controversial and would mean
people see the error when they run their next schema migration. Easy
enough to update the GUC, but maybe CREATE DATABASE alone is a
starting point.

This seems like a fair time to start the discussion for pg19.

Thoughts?

-Jeremy

--
To know the thoughts and deeds that have marked man's progress is to
feel the great heart throbs of humanity through the centuries; and if
one does not feel in these pulsations a heavenward striving, one must
indeed be deaf to the harmonies of life.

Helen Keller, The Story Of My Life, 1902, 1903, 1905, introduction by
Ralph Barton Perry (Garden City, NY: Doubleday & Company, 1954), p90.

Browse pgsql-hackers by date

  From Date Subject
Next Message Tom Lane 2025-09-09 20:37:38 Re: plan shape work
Previous Message Melanie Plageman 2025-09-09 20:29:44 Re: Incorrect logic in XLogNeedsFlush()