Мы переносим приложение с SQL Server на Postgres и пытаемся имитировать различные аспекты нечувствительности к регистру SQL Server. Мы создали недетерминированное сопоставление c для поддержки сопоставления внешних ключей и сравнения на равенство без учета регистра.
Но мы наблюдаем странное поведение при использовании ILIKE, которое мы не можем объяснить, и были бы признательны некоторая помощь.
Чтобы увидеть поведение, запустите в базе данных fre sh следующее:
CREATE COLLATION IF NOT EXISTS public.ci (provider = icu, locale = 'und-u-ks-level2', deterministic = false);
DROP TABLE IF EXISTS sort_test;
CREATE TABLE sort_test (a text COLLATE public.ci);
INSERT INTO sort_test SELECT md5(n::text) FROM generate_series(1, 10000) n;
-- Removing the following line fixes the issue
ANALYZE sort_test;
-- This line throws "nondeterministic collations are not supported for ILIKE"
SELECT * FROM sort_test WHERE a ILIKE 'c4ca4238a0%' COLLATE "und-x-icu";
Почему выполнение оператора ANALYZE нарушает выполнение оператора ILIKE?