32.2 Как сделать, чтобы PostgreSQL поддерживал русский в кодировке [нужное
вписать]?
По порядку:
1. PostgreSQL должен быть собран с ключами --enable-locale
--enable-multibyte. RPM'ы, как правило, собираются с этими ключами, если вы
собираете из исходников — не забудьте их указать!
2. У пользователя, от лица которого работает сервер (обычно postgres) должна
быть установлена нужная локаль. Этого можно добиться, например, добавив в
его файл .bash_profile строки:
LANG=ru_RU.KOI8-R
export LANG
Если нужной локали (например с кодировкой CP1251) в системе нет, то перед
этим надо проделать следующее:
$ localedef -c -i ru_RU -f CP1251 ru_RU.CP1251
3. После этого надо проинициализировать директорию, в которой будут
находиться базы данных, указав кодировку по умолчанию (можно, впрочем и не
указывать):
$ initdb -E KOI8
или, для любителей длинных ключей
$ initdb --encoding=KOI8
Учтите: начиная с версии 7.1 порядок сортировки строк и разница между
заглавными/строчными буквами задаётся именно при этой инициализации в
соответствии с установленной локалью, потом их изменить нельзя. До версии
7.1 эти значения определялись локалью при запуске postmaster'а, что могло
привести к порче индексов по текстовым полям.
4. Кодировку также можно указывать при создании отдельных баз:
$ createdb -E win mustdie
5. Если все шаги проделаны верно, то сортировка, функции upper()/lower(),
операторы ILIKE и ~* должны работать правильно. Если не работает хотя бы
одна из этих функций — проверьте настройки.
Best regards,
Step.