Вся предоставленная на этом сервере информация собрана нами из разных источников. Если Вам кажется, что публикация каких-то документов нарушает чьи-либо авторские права, сообщите нам об этом.
Замечание: Написал Oleg Bartunov.
Смотри на web странице Олега дополнительную информацию про локаль и поддержку русского языка.
Во время выполнения проекта для компании в Москве, Россия, я столкнулся
с проблемой postgresql - он не поддерживал национальные алфавиты.
Поискав возможные пути обхода, я решил разработать поддержку локали сам.
Я не программист на C, но у меня уже был некоторый опыт программирования с
локалью, когда я работал с perl (отладка) и glimpse.
После нескольких дней ковыряния исходников Postgres, я сделал несколько маленьких правочек в
src/backend/utils/adt/varlena.c и src/backend/main/main.c
и получил то что хотел!
Я сделал поддержку только для
LC_CTYPE и LC_COLLATE, но позднее LC_MONETARY была добавлена другими. Я получил много сообщений от людей об этом патче,
и поэтому решил послать его разработчикам, и (к моему удивлению) он был
включён в дистрибутив Postgres.
Люди часто жаловались, что локаль у них не работает.
Вот несколько распространённых ошибок:
Неправильно сконфигурированный postgresql перед компиляцией.
Ты должен запустить configure с опцией --enable-locale, чтобы
разрешить поддержку локали.
Неправильно настроенная среда при запуске postmaster.
Нужно определять переменные среды
LC_CTYPE и LC_COLLATE перед запуском postmaster, потому что сервер берёт информацию
о локали из среды. Я использую такой сценарий shell
(runpostgres):
Плохая поддержка локали в ОС (например, поддержка локали в libc под
Linux несколько раз изменялась и это привело к многочисленным проблемам).
Последний perl также имеет поддержку локали и если локаль не работает, то perl -v выразит недовольство:
8:17[mira]:~/WWW/postgres>setenv LC_CTYPE not_exist
8:18[mira]:~/WWW/postgres>perl -v
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LC_ALL = (unset),
LC_CTYPE = "not_exist",
LANG = (unset)
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
Неправильное расположение файлов локали!
Возможные местоположения локали:
/usr/lib/locale
(Linux, Solaris), /usr/share/locale (Linux),
/usr/lib/nls/loc (DUX 4.0).
Ищи в man locale правильное местоположение.
Под Linux я создаю символическую ссылку между /usr/lib/locale и
/usr/share/locale чтобы быть уверенным, что следующая libc не грохнет мне локаль.
Ты можешь использовать ~* и order с операторами для строк, содержащих символы национальных алфавитов.
Не английским пользователям определённо это нужно.
Если ты не хочешь использовать свойство локали, просто удали определение переменной
USE_LOCALE.