суббота, 15 ноября 2008 г.

Кодировка UTF8 в PostgreSQL 8.3

После обновления Debian в нем одновилась и СУБД PostgreSQL до версии 8.3.
Тут начались чудеса с созданием
БД. Наотрез отказывается создавать БД с кодировкой UTF8.
Аргументирует следующим:
createdb: database creation failed: ERROR:  encoding UTF8 does not match server's locale en_US
DETAIL: The server's LC_CTYPE setting requires encoding LATIN1

После
непродолжительных исследований было выяснено, при установке пакета в Debian происходит
генерация схемы для сервера
БД. При этом учитывается текущая локаль системы, у меня была en_US.

Сначала приводим текущую
локаль системы в порядок, редактируем
файл /
etc/locale.gen, где раскомментируются нужны локали,
затем
перегенерация командой locale-gen.
В файле /
etc/default/locale прописываем нужную локаль, например:

LANG=ru_RU.UTF-8

Затем, удаляем схему, которая была создана при инсталляции в /var/lib/postgresql/8.3/main/,
предварительно остановив сервер. Затем создаем новую схему нормальной
локалью:
sudo postgres /usr/lib/postgresql/8.3/bin/initdb -D /var/lib/postgresql/8.3/main/
--
locale='ru_RU.UTF-8' --lc-collate='ru_RU.UTF-8' --lc-ctype='ru_RU.UTF-8'
--
lc-time='ru_RU.UTF-8'

После чего нормально создаются
БД с UTF8.

Комментариев нет: