Info
Content

Локализация

Локаль влияет на алфавит, порядок сортировки, форматирование чисел и т. п
initdb инициализирует кластер баз данных по умолчанию с локалью из окружения выполнения, если нужно использовать другую то можно передать аргумент в initdb

initdb --locale=ru_RU

Если в языковом окружении может использоваться более одного набора символов, значение может принимать вид language_territory.codeset. Например, fr_BE.UTF-8 обозначает французский язык (fr), на котором говорят в Бельгии (BE), с кодировкой UTF-8

Иногда целесообразно объединить правила из различных локалей, например, использовать английские правила сравнения и испанские сообщения. Для этой цели существует набор категорий локали, каждая из которых управляет только определёнными аспектами правил локализации:

name description
LC_COLLATE Порядок сортировки строк
LC_CTYPE Классификация символов (Что представляет собой буква? Каков её эквивалент в верхнем регистре?)
LC_MESSAGES Язык сообщений
LC_MONETARY Форматирование валютных сумм
LC_NUMERIC Форматирование чисел
LC_TIME Форматирование даты и времени

Пример использования в initdb

initdb --locale=fr_CA --lc-monetary=en_US

LC_COLLATE и LC_CTYPE нельзя изменить после создания базы так как они влияют на порядок сортировки в индексах (иначе индексы на текстовых столбцах могут повредиться)

Если же клиент и сервер работают с разными локалями, то сообщения, возможно, будут появляться на разных языках в зависимости от того, где они возникают

Для того чтобы стал возможен перевод сообщений на язык, выбранный пользователем, NLS (National Language Support) должен быть выбран на момент сборки (configure --enable-nls)


Локаль влияет на следующий функционал SQL:

  • Порядок сортировки в запросах с использованием ORDER BY или стандартных операторах сравнения текстовых данных
  • Функции upper, lower, и initcap
  • Операторы поиска по шаблону (LIKE, SIMILAR TO, и регулярные выражения в стиле POSIX)
  • Семейство функций to_char
  • Возможность использовать индексы с предложениями LIKE

Недостатком использования отличающихся от C или POSIX локалей в PostgreSQL является влияние на производительность. Это замедляет обработку символов и мешает LIKE использовать обычные индексы. По этой причине используйте локали только в том случае, если они действительно вам нужны

postgres=# select name, setting from pg_settings where name like 'lc_%';
    name     | setting 
-------------+---------
 lc_collate  | C
 lc_ctype    | C
 lc_messages | C
 lc_monetary | C
 lc_numeric  | C
 lc_time     | C
(6 rows)

Правила сортировки позволяют устанавливать порядок сортировки и особенности классификации символов в отдельных столбцах или даже при выполнении отдельных операций. Это смягчает последствия того, что параметры базы данных LC_COLLATE и LC_CTYPE невозможно изменить после её создания

Про правила сортировки https://postgrespro.ru/docs/postgresql/14/collation
Еще одна страница которую я не понял https://postgrespro.ru/docs/postgresql/14/multibyte

No Comments
Back to top