Hi, Oleg! On Mon, Mar 31, 2025 at 9:48 AM Oleg Tselebrovskiy <o.tselebrovs...@postgrespro.ru> wrote: > When you try to run installcheck using a cluster that was initialized > with ICU (./initdb -D ../data --locale-provider=icu > --icu-locale='en_US_POSIX') and NO_LOCALE=1 you get a warning: > > # +++ regress install-check in src/test/regress +++ > # using postmaster on Unix socket, default port > WARNING: could not convert locale name "C" to language tag: > U_ILLEGAL_ARGUMENT_ERROR > WARNING: ICU locale "C" has unknown language "c" > HINT: To disable ICU locale validation, set the parameter > "icu_validation_level" to "disabled". > > This happens with PostgreSQL 16, 17 and master > > While this case is somewhat superficial (you need ICU and NO_LOCALE), > when you try to run installcheck of test_extensions test module (using a > cluster initialized with ICU) you will get the same warnings due to > NO_LOCALE=1 in Makefile > > There could be an argument "if you are using ICU and don't want warnings > just set icu_validation_level=disabled in postgresql.conf", but then > installcheck fails because of collate.icu.utf8 like this: > > CREATE COLLATION testx (provider = icu, locale = > '@colStrength=primary;nonsense=yes'); DROP COLLATION testx; > -WARNING: could not convert locale name > "@colStrength=primary;nonsense=yes" to language tag: > U_ILLEGAL_ARGUMENT_ERROR > CREATE COLLATION testx (provider = icu, locale = 'nonsense-nowhere'); > DROP COLLATION testx; > -WARNING: ICU locale "nonsense-nowhere" has unknown language > "nonsense" > -HINT: To disable ICU locale validation, set the parameter > "icu_validation_level" to "disabled". > CREATE COLLATION test4 FROM nonsense; > > And we definitely want to check warnings there > > So for now I propose adding icu_validation_level=disabled to pg_regress > when we were passed NO_LOCALE=1 (patch is attached) > > Also since locale 'C' isn't converted to anything with ICU since > f3a01af, maybe we want to somehow handle NO_LOCALE with ICU in a special > way? Maybe only during tests? > > On another none, test test_extensions from > src/test/modules/test_extensions fails during installcheck when the > cluster was initialized with ICU locale. It was already reported at [1]. > This test fails on current REL_17_STABLE (2530367) and master (2a5e709) > > One way to fix it is to just skip the test if we find ICU locale > provider (patch attached bellow), but I'm not sure this is the optimal > way. In [1] there was an attempt to replace \dx+ with function with > collation-independent output
Thank you for raising this issue. I don't think ignoring a warning is an option. The tests contain locale-sensitive orderings. Thus, if we don't manage to create a C-like locale, tests fail anyway for me. Ignoring tests is an unfavorable solution. I see two (better) options to resolve this issue: 1) Specify LOCALE_PROVIDER='builtin' in the CREATE DATABASE command. 2) Specify 'en-US-u-va-posix' as a locale name when template0 has an ICU locale provider. The #1 looks simpler. The patch is attached. What do you think? ------ Regards, Alexander Korotkov Supabase
pg_regress_locale_provider.patch
Description: Binary data