Просто взгляните, пожалуйста:
WITH toks AS (
SELECT tok
FROM
unnest('{ь, а, чь, ча, чль, чла}'::text[]) AS tok
ORDER BY tok COLLATE "uk_UA"
)
SELECT ROW_NUMBER() OVER() AS "#", tok FROM toks
ORDER BY tok COLLATE "uk_UA"
PostgreSQL 9.3 (ubuntu) дает мне этот результат:
# | tok
---+-----
1 | а
2 | ча
3 | чль
4 | чла
5 | чь
6 | ь
(6 rows)
Здесь строки 1, 2, 5 и 6 сортируются правильно ("ь" идет после "а"), а строки 3 и 4 сортируются неправильно ("а" идет после "ь").
Все буквы кириллицы, я проверил столько раз.
Пожалуйста, что не так и как обходиться. (
UPDATE: это ошибка, которая была исправлена в основном в последнее время: https://sourceware.org/bugzilla/show_bug.cgi?id=17293
UPDATE2: Пожалуйста, обратите внимание на мой собственный ответ ниже.