Это может быть исправлено путем обновления вашей версии PostgreSQL, предпочтительно до текущей версии 9.1.PostgreSQL 8.2 был выпущен в 2006 году и недавно достиг конца срока службы .
С тех пор было много улучшений для локалей.Насколько я вижу, это работает для меня в версии 9.0 (в Debian Squeeze):
SELECT upper('ѓғг̡г̨һһ̨дђеёӗ');
Результат:
ЃҒГ̡Г̨ҺҺ̨ДЂЕЁӖ
Примечание: я использую UTF8
как server_encoding
, UNICODE
как client_encoding
и *.UTF-8
(точнее de_AT.UTF-8
) для всех настроек локали (lc_*
).Другие кодировки или локали могут иметь специфические проблемы.Возможно, вы захотите показать нам результат этого запроса:
SELECT * FROM pg_settings WHERE name ~~ '%encod%' OR name ~~ 'lc%'
Редактировать после обратной связи в комментариях:
Если установлено «ничего», это означает псевдо-локаль C
(он же Posix
) установлен.C
не зависит от настроек локали, что позволяет быстрее выполнять операции сортировки.Это также означает, что ваша система не знает, каким должен быть эквивалент кириллицы в верхнем регистре.
Обязательно прочитайте главу Поддержка локалей в руководстве.(Ссылки на версию 8.2, текущая версия здесь .)
Однако, LC_CTYPE
можно установить только во время создания кластера БД.В более новых версиях вы можете основать новую базу данных на template0
и указать другие локаль и параметры кодировки, но не в версии 8.2.
Итак, я возвращаюсь к своему первоначальному совету: лучший способ действий состоит в том, чтобыустановить более новую версию PostgreSQL.И не забудьте установить желаемый языковой стандарт при настройке нового кластера базы данных.
PostgreSQL 9.1 доступен для Debian Squeeze .Так что должно быть что-то и для Ubuntu.