powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Кодировка русских букв.
44 сообщений из 44, показаны все 2 страниц
Кодировка русских букв.
    #38238778
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте.
Сразу оговорюсь с PostgreSQL сталкиваюсь впервые и как всегда встает проблема с кодировками.

Есть сторонняя база в PostgreSQL 8.1. В базу пишутся данные из приложения.
Нам дали удаленный доступ к этой БД. При открытии таблиц из pgAdmin, слова на русском отображаются криво, смотри картинку:
Декодер Лебедева показал, что это "Холодная вода" CP1252 → CP1251
Знаю, что база на win машине. Приложение которое пишет данные в базу разрабатывалось в Германии. Кодировка базы UTF8.

Как я на своем компьютере смогу посмотреть русские буквы из pgAdmin ?
Если нужны еще какие-то данные по серверу/клиенту готов предоставить.
-----------
Андрей.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38239334
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38239416
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
landy,

Прочел, спасибо.
Но не знаю чем от туда я могу помочь себе.
Если речь идет о
SET CLIENT_ENCODING TO ...
То я уже перепробовал много вариантов и ничего не получается.
Я уже давно ненавижу все это многообразие кодировок, но каждый раз приходится искать решение.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38239774
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понимаю у вас Виндовс?
Запускаете cmd
psql ...
>set client_encoding='866'
>select * from ...

или попробуйте сменить кодовую страницу в консоли
cmd
далее пробуйте
chcp 1252 (или 1251 и т д)
psql ...
> select * from ...
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38240114
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
landy,

В командной строке помогло перед запуском psql выполнить chcp 1251.
После этого select выводит корректно русские буквы.
Вопрос: а как добиться такого результата при работе с pgAdmin и через ODBC драйвер?
Буду признателен любым подсказкам.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38240615
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38240960
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
landy,

Что-то ничего пока не выходит.
Я могу произвести манипуляции только на клиентской машине. Трогать сервер и базу никак нельзя.
Для начала хочу настроить pgAdmin, чтобы в нем корректно отображались данные.
Почитав форумы заметил что у людей в основной массе проблем с pgAdmin не было, но были проблемы с консолью. В моем случае практически наоборот. Как быть?
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241149
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Belkin,

Смотрите pgadmin всегда без вариантов использует UTF8 кодировку (кроме редкого случая SQL-ASCII базы):
http://www.postgresql.org/message-id/CA+OCxozjhM5wAj84vjRNWX5TLEYEMYeh37U=ibJt22m5nqtJmA@mail.gmail.com]http://www.postgresql.org/message-id/CA+OCxozjhM5wAj84vjRNWX5TLEYEMYeh37U=ibJt22m5nqtJmA@mail.gmail.com

я почему то думаю что у вас скорее проблема выбора шрифта правильного в PgAdmin который бы корректно бы показывал UTF8 русские буквы. Вы из под какой OS запускаете pgadmin и стоит ли там поддержка русского языка?
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241174
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Maxim Boguk,

Все делается из под Windows. Русский установлен.
Машина с базой тоже виндовая, там установлен русский язык и немецкий, возможно английский.
Когда я был на месте, то успел заметить что там тоже в pgAdmin русские буквы некорректно отображаются (на 100% не уверен), но в приложении все красиво. Там с базой никто не работает кроме как через приложение.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241183
Mixantia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Belkin,

по мне так проще пальцем указать.
Сам долго понимал, что там да как с кодировками, когда пришло просветление, то стало удобно пользоваться :)
Для пгАдмин надо делать set client_encoding='1251', после коннекта и до sql запроса, это если sql запросом из него смотреть.
Еще есть SQL Manager Lite for PostgreSQL он умеет кодировку выставлять сам при коннекте к базе. Там настройки есть при создании коннекта к БД.

Если хотите использовать ODBC, который psqlodbc, то там не так все просто, там есть ситуация, когда внутри драйвера постоянно передергивается set client_encoding , но он, кстати, передергивается в 1251 :)

ЗЫЖ мне тут, кстати, совет давали хороший. Использовать в БД utf-8. Это реально помогает захватить мир, но это не ваш случай наверно :)
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241220
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mixantia,

Вы наверное имели ввиду win1251, а не просто 1251.
Это то что я сделал самым первым делом.

после установки клиента в win1251 и запуске select, появляется следующая ошибка:
Код: sql
1.
ERROR:  character 0xc3a2 of encoding "UTF8" has no equivalent in "WIN1251"



Вот что установлено на сервере в posgresql.conf
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
client_encoding = 'LATIN1'		# actually, defaults to database
					# encoding

# These settings are initialized by initdb -- they might be changed
lc_messages = 'German_Germany'			# locale for system error message 
					# strings
lc_monetary = 'German_Germany'			# locale for monetary formatting
lc_numeric = 'German_Germany'			# locale for number formatting
lc_time = 'German_Germany'				# locale for time formatting


Может это как-то поможет.
Я уже замучался с этим отображением... :(
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241465
Mixantia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Belkin,

Чтото мне кажется, что автоматом не сможете вы с такой базы видеть русские символы

http://www.postgresql.org/docs/9.2/static/multibyte.html#AEN33095

для LATIN1 нет автоматической перекодировки в WIN1251

База ваша наверно тоже создана в LATIN1 ?

Я все извращения с кодировками делал в Russian локализации (win1251 <-> win866)
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241615
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mixantia,

В консоли это как-то получается:
В командной строке помогло перед запуском psql выполнить chcp 1251.
После этого select выводит корректно русские буквы.
Да и программа как-то пишет/читает эти данные.
Кодировка базы UTF8.

Вот такая непонятка.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241818
Mixantia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Belkin,

Вы смотрите таблицу через редактор sql
или через меню просмотр данных?

Если через sql редактор, то перед select надо написать
set client_encoding='WIN1251';
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38241838
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mixantia,

Я смотрел и так и так.
В редакторе sql я вставлял set client_encoding='WIN1251'; и тогда возникает ошибка:

ERROR: character 0xc3a2 of encoding "UTF8" has no equivalent in "WIN1251"

В общем, какой-то замкнутый круг.
Но, так хочется и нужно его разорвать..!
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38242120
Mixantia
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пробуйте другие кодировки в set client_encoding
типа win866 win1252
я в них не очень разбираюсь :)
в своем проекте я только 866 и 1251 использовал, все туда сюда конвертилось.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38242134
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте запустить pgAdmin через батник

set CLIENTENCODING='LATIN1' (или 1252)
pgadmin.exe

Мне кажется, в БД данные лежат в 1251, т е они передаются и записываются без конвертации из 1251
Когда вы в сессии устанавливаете set client_encoding to '...' данные конвертятся из 1251
(сервер считает, что они в LATIN1) в 1251 через таблицу LATIN1->1251
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38242139
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
т е когда вы сделали chcp1251 в консоли, вы сменили просто кодовую таблицу для отображения данных,
а об этом psql не догадывается, он что получил, то и отобразил - без конвертации
а т к он получил в 1251 - он просто вывел то, что получил на консоль
(конвертировать через set client_encoding его не просили)
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38242449
landy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если pgAdmin использует UTF-8, он скорее всего будет делать конвертацию
из той кодировки(у вас однобайтовая) в UTF-8. Но т к у вас будет latin1(чтобы не конвертировалось
сервер БД-> клиент), а фактически 1251, помеченные как latin 1
будет конвертация 1251 на таблице latin1->UTF-8, т е каша
Используйте psql или настройте сервер правильно(пересоздав БД и перегрузив данные)
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38243764
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
landyЕсли pgAdmin использует UTF-8, он скорее всего будет делать конвертацию
из той кодировки(у вас однобайтовая) в UTF-8. Но т к у вас будет latin1(чтобы не конвертировалось
сервер БД-> клиент), а фактически 1251, помеченные как latin 1
будет конвертация 1251 на таблице latin1->UTF-8, т е каша
Используйте psql или настройте сервер правильно(пересоздав БД и перегрузив данные)

Вот вы "накрутили" про кодировки... я толком и не понял.
Я уже склоняюсь к тому, что придется использовать psql.
Так как моя задача сводится к тому, что нужно забрать с того сервера часть данных и залить в SQL Server. То хочу попробовать еще через copy и промежуточный сервер PostreSQL.
Пока жду доступ к папке на сервере из которой буду забирать файлы после copy. Надеюсь там проблем с кодировкой не возникнет.
А так хотелось сделать все по простому через ODBC драйвер.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38243868
Фотография Maxim Boguk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BelkinlandyЕсли pgAdmin использует UTF-8, он скорее всего будет делать конвертацию
из той кодировки(у вас однобайтовая) в UTF-8. Но т к у вас будет latin1(чтобы не конвертировалось
сервер БД-> клиент), а фактически 1251, помеченные как latin 1
будет конвертация 1251 на таблице latin1->UTF-8, т е каша
Используйте psql или настройте сервер правильно(пересоздав БД и перегрузив данные)

Вот вы "накрутили" про кодировки... я толком и не понял.
Я уже склоняюсь к тому, что придется использовать psql.
Так как моя задача сводится к тому, что нужно забрать с того сервера часть данных и залить в SQL Server. То хочу попробовать еще через copy и промежуточный сервер PostreSQL.
Пока жду доступ к папке на сервере из которой буду забирать файлы после copy. Надеюсь там проблем с кодировкой не возникнет.
А так хотелось сделать все по простому через ODBC драйвер.

чтобы работать через ODBC база на той стороне должна быть в 1251 а не в latin1 с данными в 1251.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #38256795
Belkin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Получилось сделать только через промежуточную базу.
1. Сделал COPY TO на базе с "кракозябрами"
2. Скопировал/переместил файл к себе (можно исключить шаг)
3. Залил в свою базу PostgreSQL через COPY FROM предварительно установив set client_encoding to 'win1251';
4. Через ODBC и link server в SQL Server залил данные.

Всем кто пытался помочь - ОГРОМНОЕ спасибо!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Кодировка русских букв.
    #39268163
Kerno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго времени суток!
Тематика этого поста схожа с моей проблемой, поэтому решил не плодить новых тем.
Помогите вот с такой непоняткой:
Есть виндовый сервер, там Postgresql 9.5.3, сидит БД (кодировка = utf-8, сопоставление = Russian_Russia.1251). Эту БД я бэкапю с помощью pg_dump в файл *.sql.
Затем беру другой сервер с аналогичными параметрами, где заранее создаю БД с таким же названием, как и та, которую я забэкапил, этой базе я задал такие же кодировку и наименование.
Открываю cmd и пишу:
C:\Users\администратор>"c:\Program Files\PostgreSQL\9.5\bin\psql.exe" -U postgres -d <mydatabasename> -f E:\mydatabasename_dump.sql
Запускаю, ввожу пароль для postgres, начинается восстановление...все вроде бы хорошо, но тут хлоп - какая-то ошибка проскакивает (остановку на ошибке я не делаю, так как дело-то в основном все-равно для тестов, не страшно). Но вот ошибка эта выводится в кракозябрах:
psql:E:/mydatabasename_dump.sql:70: Р?РЁР?Р'Р?Р?: С"С?Р?РєС┼РёС? "writenavdatafromtable" С? Р°С?Р?С?Р?РчР?С'Р°Р?Рё С'акиС: С'РёРїР?Р? С?Р¶Рч С?С?С%РчС?С'Р?С?РчС'
Т.е. мне не страшно, что сами ошибки выпадают. Это в принципе ожидалось. Мне бы их как-то прочитать.
Что я уже только не пробовал.
и chcp с 866 на 1251 менял, и --set client_encoding='WIN1251' делал, и даже 'WIN866' пробовал (советовали тут в одном гайде). Все-равно кракозябры. Как быть?
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39268657
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kerno,

1. Открой cmd.exe
2. Установи шрифт Lucida Console
3. Установи переменную: SET LANGUAGE=ru
4. Выполни команду: psql --help
Что выводится?

Но я бы предложил читать сообщения об ошибках на английском.
Для этого можно после запуска cmd.exe выставить переменную:
SET LANGUAGE=en

А для того чтобы данные правильно выгружались/загружались, важно использовать одну и туже кодировку для pg_dump при выгрузке и psql/pg_restore при загрузке.

Поскольку БД в UTF8, имеет смысл перед запуском pg_dump выставить:
SET PGCLIENTENCODING=UTF8

А в самой команде использовать опцию encoding:
pg_dump --encoding=UTF8
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39268662
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забыл
Павел Лузанов1. Открой cmd.exe
1.1. Выполни: chcp 1251
2. Установи шрифт Lucida Console
3. Установи переменную: SET LANGUAGE=ru
4. Выполни команду: psql --help
Что выводится?
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39268689
Kerno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,
спасибо за ответ!

автор1. Открой cmd.exe
2. Установи шрифт Lucida Console
3. Установи переменную: SET LANGUAGE=ru
4. Выполни команду: psql --help
Что выводится?

Но я бы предложил читать сообщения об ошибках на английском.
Для этого можно после запуска cmd.exe выставить переменную:
SET LANGUAGE=en
Попробовал. Help выводит корректно. На всякий случай выставил SET LANGUAGE=en, проверил - хелп вывелся на английском. Отработал комманду восстановления - ошибки все-равно пошли в кракозябрах.
авторА для того чтобы данные правильно выгружались/загружались, важно использовать одну и туже кодировку для pg_dump при выгрузке и psql/pg_restore при загрузке.

Поскольку БД в UTF8, имеет смысл перед запуском pg_dump выставить:
SET PGCLIENTENCODING=UTF8

А в самой команде использовать опцию encoding:
pg_dump --encoding=UTF8
Попробую это, но правильно ли я понял, что вот мою конкретную проблему с нечитабельностью сообщений об ошибках это не решит?
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39268897
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KernoПопробовал. Help выводит корректно. На всякий случай выставил SET LANGUAGE=en, проверил - хелп вывелся на английском. Отработал комманду восстановления - ошибки все-равно пошли в кракозябрах.

А если перед командой восстановления сделать:
SET PGOPTIONS='-c LC_MESSAGES=en_US.UTF8'
KernoПопробую это, но правильно ли я понял, что вот мою конкретную проблему с нечитабельностью сообщений об ошибках это не решит?
Правильно.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39269500
Kerno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторА если перед командой восстановления сделать:
SET PGOPTIONS='-c LC_MESSAGES=en_US.UTF8'
Ввел эту команду в cmd перед командой восстановления, затем ввел:
Код: powershell
1.
C:\Users\администратор>"C:\Program Files\PostgreSQL\9.5\bin\psql.exe" -U postgres -d basename -f e:\basename.sql


не помогло. получил:
авторpsql: Р'Р?Р-Р?Р?: Р?РчР?РчС?Р?С<Р№ Р°С?Р?С?Р?РчР?С' РєР?Р?Р°Р?Р?Р?Р?Р№ С?С'С?Р?
РєРё Р?Р>С? С?РчС?Р?РчС?Р?Р?Р?Р? РїС?Р?С+РчС?С?Р°: '-c
ПОДСКАЗКА: Р"Р>С? Р?Р?РїР?Р>Р?РёС'РчР>С?Р?Р?Р№ РёР?С"Р?С?Р?Р°С+РёРё РїР?РїС?Р?Р
+С?Р№С'Рч "postgres --help".
Наверняка что-нибудь про то, что такая БД, и ее сущности, уже существует.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39269832
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kernoне помогло. получил
Почему ты считаешь, что не помогло? Заказал utf-8 - получил utf-8.
chcp 65001 спасёт ОРД.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39269866
Kerno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Это не помогло решению моей проблемы, а моя проблема в том, что не отображаются сообщения об ошибках в читабельном виде.
После ввода предложенной команды (chcp 65001), получил вот это:
авторC:\Users\администратор>chcp 65001
Active code page: 65001

C:\Users\администратор>"C:\Program Files\PostgreSQL\9.5\bin\psql.exe" -U postgres -d basename-f e:\basename.sql
П
psql: Р
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39269895
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kerno,

Если желание разобраться еще не пропало, то можно продолжить.

1. Для начала, какой дистрибутив PostgreSQL используете, где брали?
2. В какой кодировке e:\basename.sql (в UTF8?). Можно на него взглянуть?

3. Запускаем cmd.exe
4. шрифт Lucida Console
5. chcp 1251
6. SET LANGUAGE=en
7. SET PGCLIENTENCODING=WIN1251
8. SET PGOPTIONS='-c LC_MESSAGES=C'
9. SET

Дальше интересует вывод на экран от команд:

9. Запускаем psql (без указания дамп файла): psql.exe -U postgres -d basename
10. \list basename
11. \encoding
12. show lc_messages;

Вот всё что на экране появилось после запуска cmd.exe - всё сюда.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39270034
Kerno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,

Конечно.
автор1. Для начала, какой дистрибутив PostgreSQL используете, где брали?
2. В какой кодировке e:\basename.sql (в UTF8?). Можно на него взглянуть?

3. Запускаем cmd.exe
4. шрифт Lucida Console
5. chcp 1251
6. SET LANGUAGE=en
7. SET PGCLIENTENCODING=WIN1251
8. SET PGOPTIONS='-c LC_MESSAGES=C'
9. SET

Дальше интересует вывод на экран от команд:

9. Запускаем psql (без указания дамп файла): psql.exe -U postgres -d basename
10. \list basename
11. \encoding
12. show lc_messages;

Вот всё что на экране появилось после запуска cmd.exe - всё сюда.
1. select version(): "PostgreSQL 9.5.3, compiled by Visual C++ build 1800, 64-bit"
Брал на оф.сайте
2.Notepad++ мне подсказывает, что файл в кодировке UTF8. Могу процитировать начальные настройки из файла, там где всякие переменные задаются, но содержимое таблиц дать не могу:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
--
-- PostgreSQL database dump
--

-- Dumped from database version 9.5.3
-- Dumped by pg_dump version 9.5.3

SET statement_timeout = 0;
SET lock_timeout = 0;
SET client_encoding = 'UTF8';
SET standard_conforming_strings = on;
SET check_function_bodies = false;
SET client_min_messages = warning;
SET row_security = off;

--
-- Name: plpgsql; Type: EXTENSION; Schema: -; Owner: 
--

CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;


--
-- Name: EXTENSION plpgsql; Type: COMMENT; Schema: -; Owner: 
--

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';


SET search_path = public, pg_catalog;


3.-8.:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Microsoft Windows [Version 6.3.9600]
(c) Корпорация Майкрософт (Microsoft Corporation), 2013. Все права защищены.

C:\Users\администратор>chcp 1251
Текущая кодовая страница: 1251

C:\Users\администратор>SET LANGUAGE=en

C:\Users\администратор>SET PGCLIENTENCODING=WIN1251

C:\Users\администратор>SET PGOPTIONS='-c LC_MESSAGES=C'

C:\Users\администратор>SET row_security = off

C:\Users\администратор.CITYHALL>


Сделал.
9. Не могу подключиться к базам данных. По ходу что-то не так с инициализацией подключения после SET PGOPTIONS='-c LC_MESSAGES=C'
Код: powershell
1.
2.
3.
4.
5.
6.
C:\Users\администратор>"c:\Program Files\PostgreSQL\9.5\bin\psql.exe" -
U postgres -d basename
Password for user postgres:
psql: Р'Р?Р-Р?Р?:  Р?РчР?РчС?Р?С<Р№ Р°С?Р?С?Р?РчР?С' РєР?Р?Р°Р?Р?Р?Р?Р№ С?С'С?Р?РєРё Р?Р>С? С?РчС?Р?РчС?Р?Р?Р?Р? РїС?Р?С&#9532;РчС?С?Р°: '-c 
HINT:  Р"Р>С? Р?Р?РїР?Р>Р?РёС'РчР>С?Р?Р?Р№ РёР?С"Р?С?Р?Р°С&#9532;РёРё РїР?РїС?Р?Р+С?Р№
С'Рч "postgres --help".


Пока что ищу способ отменить этот параметр, чтобы подтвердить свою догадку.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39270048
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kerno,

Да что его искать. Нужно удалить переменную:
SET PGOPTIONS=

Что теперь после подключения к psql с остальными командами?
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39270071
Kerno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,
угу:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
C:\Users\администратор>SET PGOPTIONS=

C:\Users\администратор>"c:\Program Files\PostgreSQL\9.5\bin\psql.exe" -U postgres -d basename
Password for user postgres:
psql (9.5.3)
WARNING: Console code page (866) differs from Windows code page (1251)
         8-bit characters might not work correctly. See psql reference
         page "Notes for Windows users" for details.
Type "help" for help.

basename=#


автор10. \list basename
11. \encoding
12. show lc_messages;
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
basename=# \list basename
                                        List of databases
    Name    |  Owner   | Encoding |       Collate       |        Ctype        |
Access privileges
------------+----------+----------+---------------------+---------------------+-
------------------
 basename | postgres | UTF8     | Russian_Russia.1251 | Russian_Russia.1251 |
(1 row)
basename=# \encoding
WIN1251
basename=# show lc_messages;
     lc_messages
---------------------
 Russian_Russia.1251
(1 row)
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39270081
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kerno,

Нашел ненуженый win7, поставил PostgreSQL с оф. сайта (это версия EnterpriseDB).

Вот что получается.
1. Заставить корректно работать окно cmd.exe, UTF8 и psql у меня не получается.
Т.е. после установки chcp 65001 и выставления параметра client_encoding=UTF8 psql всё равно работает некорректно.

2. Переменная PGOPTIONS почему то приводит к ошибке подключения, хотя синтаксис вроде верный.

Поэтому предлагаю следующее.
Сообщения. Их лучше выводить на английском.
Сообщения бывают двух видов: сообщения сервера и сообщения клиентских утилит (psql, pg_dump).
Клиентские сообщения переводятся на английский установкой переменной: SET LANGUAGE=en (это один из многих вариантов)
Сообщения сервера можно переключить на английский так. Заходим в psql и выполняем (это нужно сделать один раз):
alter system set lc_messages to 'C';
select pg_reload_conf();

Сами данные.
Текущая ситуация. pg_dump был сделан в UTF8 и в самом начале скрипта выставляет client_encoding в UTF8.
Так что данные должны восстанавливаться правильно, но в окне cmd будут отображаться некорректно.

Для работы с psql, как уже и говорили: chcp 1251 перед запуском psql. Кириллица будет использоваться корректно.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39270220
Victor Spirin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В официальной сборке для Windows есть проблемы с русской кодировкой. Год назад я с этим плотно занимался. Для официальной сборки помогало только переключение на английский всех сообщений.
Когда я делал свою сборку, проблема решилась правильной библиотекой GETTEXT и ICONV. Свои сборки я размещал здесь:
http://vvs.ru/pg , но последние версии не собирал.
Сборки от posgrespro этими глюками вроде бы также не страдают: http://postgrespro.ru/products/download
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39270444
Kerno
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,

Воо! То что нужно. Спасибо!
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39270463
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Виктор, привет!

Вынужден признать, что все три сборки (EnterpriseDB, PostgresPro и твоя) работают с UTF8 из cmd.exe одинаково и некорректно.
Точнее не работают.

Вот как это выглядит:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Users\Pavel>chcp 65001
Active code page: 65001

C:\Users\Pavel>SET PGCLIENTENCODING=UTF8

C:\Users\Pavel>psql --help
psql - эИс  psql [ПОб  -c, --command=К  -d, --dbname=Б  -f, --file=И  -l, --list               в  -v
, --set=, --variable=И  -V, --version            п  -X, --no-psqlrc          и  -1 ("о  -?, --help[=
options]     п      --help=commands      п      --help=variables     п
П  -a, --echo-all           о  -b, --echo-errors        о  -e, --echo-queries       о  -E, --echo-hi
dden        в  -L, --log-file=И  -n, --no-readline        о  -o, --output=И  -q, --quiet
  п  -s, --single-step        п  -S, --single-line        о
П  -A, --no-align           р  -F, --field-separator=С  -H, --html               в  -P, --pset=П  -R
, --record-separator=С  -t, --tuples-only        в  -T, --table-attr=Т  -x, --expanded           в
-z, --field-separator-zero
                           с  -0, --record-separator-zero
                           с
П  -h, --host=И  -p, --port=П  -U, --username=И  -w, --no-password        н  -W, --password
  з
ЧОб
C:\Users\Pavel>psql
psql (9.5.2)
ПРВвpostgres=# \encoding
UTF8
postgres=# \list
Not enough memory.
postgres=# select1;
Рpostgres=#


Т.е. установив кодировку UTF8 (chcp 1251 и правильные шрифты) я попробовал:
- вывести сообщения клиента: psql --help
- сделать запрос к БД: \list
- вывести сообщения сервера: ошибочная команда select1;

Ничего из вышеперечисленного с кириллицей не работает.

Да, можно переключиться в win1251 (chcp 1251), тогда всё корректно.
Но база то в UTF8, а все утилиты постгреса - консольные и получается, что не могут корректно работать в UTF8.
Взять pg_dump. Он должен выгружать в UTF8, но потом при восстановлении на экране кракозябры будут, хотя восстановится всё корректно.
В общем, не аккуратненько.

Спрошу у наших, можно ли ситуацию поправить.
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39270511
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Павел Лузанов,

Ух ты. У нас оказывается идет доработка и тестирование новой сборки под windows, в которой помимо корректной работы с UTF8 будет еще и автодополнение работать.
Дали поиграться, вот что получается:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
C:\Users\Pavel>chcp 65001
Active code page: 65001

C:\Users\Pavel>SET PGCLIENTENCODING=UTF8

C:\Users\Pavel>"c:\Program Files\PostgreSQL\9.5\bin\psql" --help
psql - это интерактивный терминал PostgreSQL.

Использование:
  psql [ПАРАМЕТР]... [БД [ПОЛЬЗОВАТЕЛЬ]]

Общие параметры:
  -c, --command=КОМАНДА    выполнить одну команду (SQL или внутреннюю) и выйти
  -d, --dbname=БД          имя подключаемой базы данных (по умолчанию "postgres")
  -f, --file=ИМЯ_ФАЙЛА     выполнить команды из файла и выйти
  -l, --list               вывести список баз данных и выйти
  -v, --set=, --variable=ИМЯ=ЗНАЧЕНИЕ
                           присвоить переменной psql ИМЯ заданное ЗНАЧЕНИЕ
                           (например: -v ON_ERROR_STOP=1)

... ну и так далее ...

C:\Users\Pavel>"c:\Program Files\PostgreSQL\9.5\bin\psql"
psql (9.5.1.3, сервер 9.5.1.3)
WARNING: Unicode mode enabled. You need TTF font in your console window
Введите "help", чтобы получить справку.

postgres=# \list
                                          Список баз данных
    Имя    | Владелец | Кодировка |     LC_COLLATE      |      LC_CTYPE       |     Права доступа

-----------+----------+-----------+---------------------+---------------------+---------------------
--
 postgres  | postgres | UTF8      | Russian_Russia.1251 | Russian_Russia.1251 |
 template0 | postgres | UTF8      | Russian_Russia.1251 | Russian_Russia.1251 | =c/postgres
 +
           |          |           |                     |                     | postgres=CTc/postgre
s
 template1 | postgres | UTF8      | Russian_Russia.1251 | Russian_Russia.1251 | =c/postgres
 +
           |          |           |                     |                     | postgres=CTc/postgre
s
(3 строки)

postgres=# select1;
ОШИБКА:  ошибка синтаксиса (примерное положение: "select1")
СТРОКА 1: select1;
          ^
postgres=#
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39270528
Victor Spirin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,

У меня вроде бы все нормально с psql, сообщения на \list и select1; выдаются корректно
В инсталляторе создается ярлык для запуска psql, для которого настраивается шрифт для консоли Lucida и запуск с командой chcp 1251.

В сборке от EDB это не помогало. Помнится команда chcp 65001 у меня вообще не работала корректно.

Проверил
pg_dump.exe --format custom --blobs --encoding UTF8 --verbose --file "c:/temp/test2.backup" "VvsTest1"
- выдает сообщения корректно и без chcp
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39270535
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor SpirinПомнится команда chcp 65001 у меня вообще не работала корректно.

Вот именно об этом и речь ))
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39270544
Victor Spirin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,

Да, pg_restore.exe --dbname "alex1" --no-password --verbose "c:/temp/test2.backup"
местами пишет кракозябры.

А где Вы правите работу с UTF в своей сборке - в ядре postgres или в библиотеках, вроде gettext ?
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39270869
Victor Spirin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Павел Лузанов,

Кстати, раз Вы готовите обновление Windows сборки, то сообщаю, что столкнулся с ситуацией когда наши инсталляторы не устанавливают postgres под Windows 10 Home. Возникает проблема с установкой прав доступа на папку с данными, в домашней редакции Win10 скрипт не дает нужных прав и база данных не инициализируется. В итоге, я давал права вручную и повторно устанавливал. (Диме Васильеву я сразу сообщил как заметил.)
...
Рейтинг: 0 / 0
Кодировка русских букв.
    #39271668
Павел Лузанов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Victor Spirin,

Спасибо за информацию про win10.
Где правят - точно не в ядре, но подробностей не знаю.
...
Рейтинг: 0 / 0
44 сообщений из 44, показаны все 2 страниц
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Кодировка русских букв.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]