6
Настройка сервера
PostgreSQL
LC_COLLATE = en_US.UTF8
LC_CTYPE = en_US.UTF8
template0
initdb --encoding='UTF8' --locale='ru_RU.UTF8'
CREATE DATABASE db
TEMPLATE = template0
ENCODING = 'KOI8R'
LOCALE = 'ru_RU.koi8r'
db
template1
параметры локализации
нельзя изменить после
создания базы
Установка локали выполняется при инициализации кластера баз
данных. Утилита initdb использует локаль из окружения ОС, либо
локаль можно указать явно через соответствующие параметры.
При создании новой базы данных из шаблона template0 можно указать
параметры локализации, отличные от тех, что использовались при
инициализации кластера баз данных.
К основным параметрам локализации базы данных относятся:
кодировка символов (encoding), а также категории локали lc_ctype
и lc_collate, которые удобно задавать одним параметром (ключом)
locale, потому что их значения обычно совпадают.
На эти категории локали накладываются ограничения:
●
кодировки символов у locale (lc_ctype и lc_collate) должны совпадать
с кодировкой базы данных.
●
после создания базы данных locale (lc_ctype и lc_collate) изменить
нельзя.
Второе ограничение объясняется тем, что изменение правил
сортировки и классификации символов может нарушить работу
существующих индексов. Кроме того, может измениться поведение
операций сравнения текстовых строк в ограничениях CHECK и
табличных триггерах, что сделает уже сохраненные данные
некорректными.
Именно поэтому, если нужно создать базу с отличающимися
параметрами локализации, необходимо использовать шаблон
template0, в котором гарантированно нет никаких данных.