powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Кодировка русских букв.
19 сообщений из 44, страница 2 из 2
Кодировка русских букв.
    #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
19 сообщений из 44, страница 2 из 2
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Кодировка русских букв.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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