Pgadmin кодировка ошибок

Материал из Кафедра ИУ5 МГТУ им. Н.Э.Баумана — студенческое сообщество

Postgresql logo.png

В статье пойдёт речь о том, как добиться корректного вывода кириллицы в «консоли» Windows (cmd.exe).

Содержание

  • 1 Описание проблемы
  • 2 Решение проблемы
    • 2.1 Суть
    • 2.2 Конкретные действия
      • 2.2.1 Супер быстро и просто
      • 2.2.2 Быстро и просто
      • 2.2.3 Посложнее и подольше

Описание проблемы

В дистрибутив PostgreSQL, помимо всего прочего, для работы с СУБД входит:

  • приложение с графическим интерфейсом pgAdmin;
  • консольная утилита psql.

При работе с psql в среде Windows пользователи всегда довольно часто сталкиваются с проблемой вывода кириллицы. Например, при отображении результатов запроса к таблице, в полях которых хранятся строковые данные на русском языке.

Psql.codepage.fail.png

Ну и зачем тогда работать с psql, кому нужно долбить клавиатурой в консольке, когда можно всё сделать красиво и быстро в pgAdmin? Ну, не всегда pgAdmin доступен, особенно если речь идёт об удалённой машине. Кроме того, выполнение SQL-запросов в текстовом режиме консоли — это +10 к хакирству.

Решение проблемы

Версии ПО:

  • MS Windows 7 SP1 x64;
  • PostgreSQL 8.4.12 x32.

На сервере имеется БД, созданная в кодировке UTF8.

Суть

Суть проблемы в том, что cmd.exe работает (и так будет до скончания времён) в кодировке CP866, а сама Windows — в WIN1251, о чём psql предупреждает при начале работы:

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.

Значит, надо как-то добиться, чтобы кодировка была одна.

В разных источниках встречаются разные рецепты, включая правку реестра и подмену файлов в системных папках Windows. Ничего этого делать не нужно, достаточно всего трёх шагов:

  1. сменить шрифт у cmd.exe;
  2. сменить текущую кодовую страницу cmd.exe;
  3. сменить кодировку на стороне клиента в psql.

Конкретные действия

Супер быстро и просто

Запускаете cmd.exe, оттуда psql:

psql -d ВАШАБАЗА -U ВАШЛОГИН

Далее:

psql ! chcp 1251

Posgresql console 1251.png

Быстро и просто

Запускаете cmd.exe, оттуда psql:

psql -d ВАШАБАЗА -U ВАШЛОГИН

Вводите пароль (если установлен) и выполняете команду:

set client_encoding='WIN866';

И всё. Теперь результаты запроса, содержащие кириллицу, будут отображаться нормально. Но есть небольшой косяк:

Psql.codepage.866.png

Потому предлагаем ещё способ, который этого недостатка лишён.

Посложнее и подольше

Запустить cmd.exe, нажать мышью в правом левом верхнем углу окна, там Свойства — Шрифт — выбрать Lucida Console. Нажать ОК.

Psql.console.font.png

Выполнить команду:

chcp 1251

В ответ выведет:

Текущая кодовая страница: 1251

Запустить psql;

psql -d ВАШАБАЗА -U ВАШЛОГИН

Кстати, обратите внимание — теперь предупреждения о несовпадении кодировок нет.

Выполнить:

set client_encoding='win1251';

Он выведет:

SET

Всё, теперь кириллица будет нормально отображаться.

Проверяем:

Psql.codepage.ok.png

12 / 11 / 5

Регистрация: 21.08.2012

Сообщений: 226

1

03.03.2022, 13:21. Показов 2755. Ответов 2


Студворк — интернет-сервис помощи студентам

Доброго времени суток.

При восстановлении базы данных из дампа в сообщениях лога нарушается кодировка — часть текста выводится знаком вопроса. Если база успешно восстанавливается, то это не страшно. Но вот восстановление базы postgres_air завершается с ошибкой, а какая ошибка — понять невозможно.

Основной вопрос — как настроить PgAdmin так, чтобы текст в логах стал читаемым.

Версия PgAdmin: 6.4
Режим приложения: Рабочая станция
Текущий пользователь: pgadmin4@pgadmin.org
NW.js Version: 0.55.0
Обозреватель: Chromium 92.0.4515.107
Operating System: Windows-10-10.0.17134-SP0

P.S. Если кому интересно:
Дампы взяты из примеров к книге «Домбровская Г. и др. Оптимизация запросов PostgreSQL. 2022»
Архивы с дампами базы

Добавлено через 2 часа 52 минуты
Начало и конец лога:

Кликните здесь для просмотра всего текста

PID Пользователь Приложение Клиент Серверный процесс запущен Состояние Wait event Блокирующие PID
9604 postgres pgAdmin 4 — DBostgres_air 127.0.0.1 2022-03-02 15:47:05 +04 active

C:Program FilesPostgreSQL14binpg_restore.exe —host «localhost» —port «5432» —username «postgres» —no-password —dbname «postgres_air» —section=pre-data —section=data —section=post-data —clean —verbose «D:\Books\Database\Другие СУБД\PostgreSQL\Домбровская. Оптимизация запросов PostgreSQL\postgres_air.backup»
pg_restore: ??????????? ? ???? ?????? ??? ??????????????
pg_restore: ????????? FK CONSTRAINT phone phone_account_id_fk
pg_restore: ??? ????????? ??????????:
pg_restore: ?? ?????? ?????????? 3160; 2606 60260 FK CONSTRAINT phone phone_account_id_fk hettie
pg_restore: ??????: could not execute query: ОШИБКА: схема «postgres_air» не существует
??????????? ???????: ALTER TABLE ONLY postgres_air.phone DROP CONSTRAINT phone_account_id_fk;
pg_restore: ????????? FK CONSTRAINT boarding_pass passenger_id_fk
pg_restore: ?? ?????? ?????????? 3150; 2606 60255 FK CONSTRAINT boarding_pass passenger_id_fk postgres

. . .

pg_restore: ???????? FK CONSTRAINT «postgres_air.boarding_pass passenger_id_fk»
pg_restore: ???????? FK CONSTRAINT «postgres_air.phone phone_account_id_fk»
pg_restore: ??????????????: ??? ?????????????? ??????????????? ??????: 66
pg_restore: ???????? FK CONSTRAINT «postgres_air.boarding_pass booking_leg_id_fk»
pg_restore: ???????? FK CONSTRAINT «postgres_air.flight departure_airport_fk»
pg_restore: ???????? FK CONSTRAINT «postgres_air.booking_leg flight_id_fk»
pg_restore: ???????? FK CONSTRAINT «postgres_air.account frequent_flyer_id_fk»
pg_restore: ???????? FK CONSTRAINT «postgres_air.passenger pass_account_id_fk»
pg_restore: ???????? FK CONSTRAINT «postgres_air.passenger pass_booking_id_fk»
pg_restore: ???????? FK CONSTRAINT «postgres_air.passenger pass_frequent_flyer_id_fk»
pg_restore: ???????? FK CONSTRAINT «postgres_air.boarding_pass passenger_id_fk»
pg_restore: ???????? FK CONSTRAINT «postgres_air.phone phone_account_id_fk»
pg_restore: ??????????????: ??? ?????????????? ??????????????? ??????: 66



0



1213 / 938 / 373

Регистрация: 02.09.2012

Сообщений: 2,859

04.03.2022, 00:32

2

попробуйье туже самую команду из консоли windows, поигравшись с кодировками перед запуском pg_restore
chcp 866
chcp 1251
chcp 65001
может какая-то из них подойдет и вы увидите сообщения в нужной локализации



1



12 / 11 / 5

Регистрация: 21.08.2012

Сообщений: 226

04.03.2022, 08:30

 [ТС]

3

grgdvo Последовал Вашему совету и запустил из командной строки FARа. Все сообщения отобразились корректно. Мало того, похоже база полностью загрузилась. Строк с числом 66 в конце вообще не вывело. И без всяких игр с кодировками.

Проблема с кодировкой в PgAdmin не решена, но обходной путь найден.



0



I have installed postgreSQL.

I use pgAdminIII as admin panel.

I am trying to watch tables content and see following:

pgadmin screenshot

How to avoid encoding problem?

Daniel Vérité's user avatar

Daniel Vérité

57.4k15 gold badges127 silver badges152 bronze badges

asked Oct 4, 2014 at 11:16

Коля я's user avatar

5

For a UTF8 database, pgAdmin should always display strings correctly. The most likely explanation is that the data itself is incorrect.

This generally happens when a client application sends data in a format which doesn’t match its client_encoding setting. If this is the case, setting client_encoding correctly would prevent this from happening (provided the client application’s code page is supported by Postgres). This wouldn’t fix the existing data, but it might be possible to repair it with the convert function.

answered Oct 4, 2014 at 12:39

Nick Barnes's user avatar

Nick BarnesNick Barnes

19.4k3 gold badges51 silver badges63 bronze badges

5

В логах периодически появляются сообщения в кракозябре. Не всегда. Обычно сообщения на русском отображаются нормально. Такая же проблема с кодировкой в pgAdmin, например, при попытке выполнить запрос с ошибкой в синтаксисе.
При установке и клиент и сервер выставлялся с кодировкой Win1251

Вот кусок лога:

2009-03-29 19:34:03 ALMT LOG: система была отключена: 2009-03-29 19:31:54 ALMT
2009-03-29 19:34:03 ALMT LOG: loaded library «$libdir/plugins/plugin_debugger.dll»
2009-03-29 19:34:03 ALMT FATAL: система баз данных стартует
2009-03-29 19:34:03 ALMT LOG: database system is ready to accept connections
2009-03-29 19:34:03 ALMT LOG: autovacuum launcher started
2009-03-29 19:34:04 ALMT LOG: loaded library «$libdir/plugins/plugin_debugger.dll»
2009-03-29 19:34:53 ALMT LOG: loaded library «$libdir/plugins/plugin_debugger.dll»
2009-03-29 19:34:54 ALMT NOTICE: нет транзакции в процессе выполнения
2009-03-29 19:34:54 ALMT LOG: loaded library «$libdir/plugins/plugin_debugger.dll»
2009-03-29 19:34:54 ALMT NOTICE: нет транзакции в процессе выполнения
2009-03-29 19:34:58 ALMT NOTICE: нет транзакции в процессе выполнения
2009-03-29 19:35:29 ALMT NOTICE: нет транзакции в процессе выполнения
2009-03-29 19:35:30 ALMT NOTICE: нет транзакции в процессе выполнения

Вот. А последняя ошибка очень интересует.
Что тут можно предпринять?
Спасибо.

ОС: XP Pro. Postgres версии 8.3.

I have a PostgreSQL on Windows 7 machine. And here my data base script:

CREATE DATABASE usersdb
   WITH OWNER = postgres
   ENCODING = 'UTF8'
   TABLESPACE = pg_default
   LC_COLLATE = 'Russian_Russia.1251'
   LC_CTYPE = 'Russian_Russia.1251'
   CONNECTION LIMIT = -1;

My problem in that i see unreadable error in Jetty/Tomcat:

Caused by: org.postgresql.util.PSQLException: ?????: ???????????? "test_user" ?? ?????? ???????? ??????????? (?? ??????)

I try create new db in pgAdmin but there are only LC_COLLATE = ‘Russian_Russia.1251’ and LC_CTYPE = ‘Russian_Russia.1251’ i can chose.
How can i solve this problem?

asked Aug 28, 2013 at 8:02

Kliver Max's user avatar

Kliver MaxKliver Max

5,06622 gold badges95 silver badges148 bronze badges

1

The first place to look, of course, are in the PostgreSQL logs. Those may be better handled than your Jetty/Tomcat instance.

The second question is what client encoding is set. You may want to (via jdbc):

show client_encoding;

Finally lc_messages may need to be adjusted.

answered Nov 12, 2013 at 1:57

Chris Travers's user avatar

Chris TraversChris Travers

25.2k6 gold badges63 silver badges181 bronze badges

Понравилась статья? Поделить с друзьями:
  • Peugeot ошибка неисправность двигателя
  • Peugeot ошибка p2600
  • Peugeot ошибка p1153
  • Peugeot ошибка p0272
  • Peugeot boxer ошибка p2291