Надеюсь, что кто-нибудь решал проблему и подскажет. Отмечено на ОС: GNU/Debian 6-7, Linux Mint 9-15 (32 и 64 битных).
При выводе сообщений об ошибках в баш кодировка косячит:
postgres@home:~$ psql -U qwerty psql: ?????: ???????????? "qwerty" ?? ?????? ???????? ??????????? (Peer)
Но! Непосредственно в psql и pgAdmin III выводит нормально:
postgres@home:~$ psql psql (9.1.11) Введите "help", чтобы получить справку. postgres=# SHOW client_encoding; client_encoding ----------------- UTF8 (1 строка) postgres=# \q
Аналогично, с крякозябликами, выходят все сообщения через python-драйвер "postgresql_psycopg2" (видимо ответы снимаются через тот же shell). Хоть в ORM Django, хоть в самописном коде...
Системная локаль по дефолту для данных дистибутивов:
postgres@home:~$ locale LANG=ru_RU.UTF-8 LANGUAGE= LC_CTYPE="ru_RU.UTF-8" LC_NUMERIC="ru_RU.UTF-8" LC_TIME="ru_RU.UTF-8" LC_COLLATE="ru_RU.UTF-8" LC_MONETARY="ru_RU.UTF-8" LC_MESSAGES="ru_RU.UTF-8" LC_PAPER="ru_RU.UTF-8" LC_NAME="ru_RU.UTF-8" LC_ADDRESS="ru_RU.UTF-8" LC_TELEPHONE="ru_RU.UTF-8" LC_MEASUREMENT="ru_RU.UTF-8" LC_IDENTIFICATION="ru_RU.UTF-8" LC_ALL= postgres@home:~$ locale -a C C.UTF-8 POSIX ru_RU.utf8
Кусок конфига в /etc/postgresql/9.1/main/postgresql.conf (тоже всё по дефолту):
... # - Locale and Formatting - datestyle = 'iso, dmy' #intervalstyle = 'postgres' #timezone = '(defaults to server environment setting)' #timezone_abbreviations = 'Default' # Select the set of available time zone # abbreviations. Currently, there are # Default # Australia # India # You can create your own file in # share/timezonesets/. #extra_float_digits = 0 # min -15, max 3 #client_encoding = sql_ascii # actually, defaults to database # encoding # These settings are initialized by initdb, but they can be changed. #lc_messages = 'C' lc_messages = 'ru_RU.UTF-8' # locale for system error message # strings lc_monetary = 'ru_RU.UTF-8' # locale for monetary formatting lc_numeric = 'ru_RU.UTF-8' # locale for number formatting lc_time = 'ru_RU.UTF-8' # locale for time formatting ...
Вообщем, ай нид хелп!
попробуйте перед запуском
попробуйте перед запуском
psql -U qwerty
выполнить
export SHAPE_ENCODING=UTF-8
если поможет, закиньте команду в профайл пользователя
Не помогло
К сожалению...
А что вам в bash показывает
А что вам в bash показывает команда:
Выводит, как и положено
ru_RU.UTF-8
Выше уже показывал эту переменную...
Ок. А терминал в котором вы
Ок. А терминал в котором вы это всё выводите настроен на работу с UTF-8?
Если да, то у меня последняя гипотеза, что перевод интерфейса psql в дистрибутивном пакете вашего PostgreSQL не в UTF-8, а например с koi8-r. Это можно проверить если глянуть в
/usr/share/locale/ru/LC_MESSAGES/psql-8.4.mo (путь для CentOS в вашем дистрибутиве может отличаться)
Тоже подозреваю
Что данная проблема как то связана либо с майнтейнерами Debian, либо с программистами psql. Но и одновременно, думается, что за несколько лет уже бы устранили данный баг.
cat /usr/share/locale/ru/LC_MESSAGES/psql-9.1.mo
Говорит, что всё прелестно, UTF-8. Этими месседжами в самом psql оперирует отлично.
Вообще, по моим ощущениям, кажется что происходит двойной encode при выводе в консоль баша из перловского /usr/bin/psql, но в нём я не силён...
Ой не понимаю я. Во-первых, с
Ой не понимаю я. Во-первых, с чего вы взяли, что psql - это perl'овская программа? Это самый обычный бинарник.
Во-вторых, причин появления ? в консоли может быть несколько. Перечислю все, что мне приходят в голову:
1. В консоли выбран неподдерживаемый шрифт. Но если у вас консоль UTF-8 и вы спокойно видите в ней русские буквы, то проблема не в этом.
2. В приложении неправильно установлена локаль для работы с консолью. Но уже давно psql смотрит в LANG в LC_MESSAGES. Так что если сборщики пакетов не нахимичили и этот вариант отпадает.
3. Неправильно скомилирован .mo файл. Как оказалось тоже мимо.
Другие варианты мне неизвестны. Если у вас локаль ru_RU.UTF-8, шрифт в консоли поддерживает кириллицу, другие программы прекрасно выводят русские буквы в UTF-8 - должно работать!
$ psql -U qwerty
psql: ВАЖНО: пользователь "qwerty" не прошёл проверку подлинности (Peer)
Ещё один совершенно безумный вариант, но тем не менее. Может быть у вас именно ЭТО сообщение не переведено правильно?
Прицепляю мой файл: /usr/share/locale/ru/LC_MESSAGES/psql-9.2.mo
попробуйте его положить вместо вашего.
http://yadi.sk/d/VfOqxGNaGRHvE
Поставил на виртуалку CentOS
Понимаю Ваше недопонимание. Действительно, в CentOS команда:
$ cat $(which psql) | less
показывает бинарник, а в Debian (Ubuntu и иже с ними) psql - это perl-овый скрипт (/usr/bin/psql), который согласно версии запускает уже бинарник /usr/lib/postgresql/9.1/bin/psql
Но и даже запуск непосредственно:
Так что теперь понятно, что дело не в перловом скрипте, а в сборке самого клиента.
Может кто хорошо с английским дружит, напишет всё обозначенное выше в багтрекер дебиана? А оттуда всё по убунтодистрам разойдётся...
Нашёл решение
После того как связался с майнтейнером пакета в Debian, он подсказал, что в текущей стабильной ветке дебиана исправление врятли появится, а вот в testing/unstable - скорее всего. Также подсказал, что можно подключить дополнительный репозиторий с любой версией postgresql с последними исправлениями.
apt.postgresql.org
Но просто так, обновлением постгресса не обойтись. Впрочем, можно и вообще без обновления.
Просто нужно подправить файл настройки окружения самого сервера:
А ларчик просто открывался...
Ну если это считать просто,
Ну если это считать просто, то я уже не знаю...
Это какая-то безумная специфика Debian'а и в который раз убеждаюсь, что правильно я с него ушёл на RedHat в своё время.
Сколько людей вопросы задавало по PostgreSQL в Linux ни у кого таких чудес не наблюдалось.
/etc/postgresql/9.1/main/environment
В CentOS и в остальных дистрах, которые мне встречались, я такого файла вообще не встречал, нету его.
Смотря как на это взглянуть...
Это можно сказать единственный момент, над которым пришлось потрудится в Debian. Потому и просил помощи здесь.
Я наоборот, в CentOS и RedHat множество неудобств для себя обнаруживаю, связанных с другими важными для меня инструментами...
Кстати! Это ещё одно решение: убрать совсем этот файл, проверил сейчас - работает как надо!
Видимо майнтейнеры в RedHat сталкивались с этой темой и решили убрать его совсем...
Вы заблуждаетесь. Его не
Вы заблуждаетесь. Его не решили убрать, а его просто нету. В стандартном PostgreSQL я имею в виду. Это как раз "передовые" разработки дебианщиков
Ну да, о вкусах не спорят. Я ушлёл с Дебиан, когда понял, что я трачу кучу времени и постоянно занимаюсь настройками системы вместо того, чтобы в ней просто работать сразу после установки. Смешно, конечно, но тогда Дебиан гордо анонсировал свою мегакрутую систему настройки пакетов до их установки, а РедХат ничего не анонсировал, но зато у них уже был графический установщик системы, а установленные пакеты (о чудо) работали сразу почему-то без настроек.
А для себя я понял одну вещь - удобство понятие субъективное. Единственное неудобство РедХат для пользователей Дебиан состоит в том, что в РедХат НЕ ТАК, как в Дебиан. А если освоить РедХат, то понимаешь, что всё очень даже логично и правильно!
Хм, у меня дебиан 6, в
Хм, у меня дебиан 6, в environment ничего нет, кириллицу отображает правлино, posstgres 8.4
Видите, если даже в рамках
Видите, если даже в рамках одного дистрибутива кто в лес кто по дрова, то о чём говорить?