Поддержка локали

Замечание: Написал 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.

Люди часто жаловались, что локаль у них не работает. Вот несколько распространённых ошибок:

Какая польза?

Ты можешь использовать ~* и order с операторами для строк, содержащих символы национальных алфавитов. Не английским пользователям определённо это нужно. Если ты не хочешь использовать свойство локали, просто удали определение переменной USE_LOCALE.

Какие недостатки?

Есть только один очевидный недостаток использования локали - это скорость! Так что, используй локаль, только если тебе это действительно необходимо.