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

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é

58.2k15 gold badges129 silver badges156 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.9k3 gold badges51 silver badges63 bronze badges

5

1 Answer

Sorted by:

Reset to default

0

Before : C:\Program Files\PostgreSQL\12\share\locale

After : C:\Program Files\PostgreSQL\12\share\_locale

In my case, Change ‘locale’ directory name. It works well.

edited Feb 28 at 7:23

answered Feb 27 at 8:07

palbok's user avatar

palbokpalbok

486 bronze badges

Add a comment
 | 

Your Answer

Reminder: Answers generated by Artificial Intelligence tools are not allowed on Stack Overflow. Learn more

Sign up or log in

Sign up using Google

Sign up using Facebook

Sign up using Email and Password

Post as a guest

Name

Email

Required, but never shown

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you’re looking for? Browse other questions tagged

  • postgresql
  • pgadmin

or ask your own question.

Материал из Кафедра ИУ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

В логах периодически появляются сообщения в кракозябре. Не всегда. Обычно сообщения на русском отображаются нормально. Такая же проблема с кодировкой в 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.

Logo
MurCode

  • Форумы
  • Поиск
  • О проекте

SeniorAndre

Дата: 04.05.2009 09:59:37

Господа, если кто силён в английском, опишите ошибку плиз на pgadmin-support@postgresql.org, а то у меня плохо получится…

В конcоле «Cостояниt сервера», которая есть в pgAdmin 1.10 отображается лог файл, он и в 1.8 был, но теперь внём кирилица оказалась ломаная. В 1.10 сделано очень удобно, строки из лог файла можно теперь копировать в буфер обмена (сделали кнопку), так вот теперь другая незадача (кирилица ломанная).

Вот текст из консоли

:44 MSD LOG:  00000:	duration	781.000 ms  statement: SELECT	
			  tt.SmiShortName AS СМИ,	
			  CAST(COUNT(tt.ClientID) AS INTEGER) AS Количество_фирм_в_номере	
FROM 
	(SELECT DISTINCT
	   SmiShortName,
	   ClientID
	FROM Analitic a
	WHERE 
	  a.SmiId='APPS000011' and
	  a.NomerSmi>=766 and
	  a.NomerSmi<=771 and
	  (a.SumWithNDS>0 or a.SumWithNDS+0>0)
	
	)  as tt
	GROUP BY tt.SmiShortName
	ORDER BY tt.SmiShortName

А вот текст из Лог файла.

05-04 09:33:44 MSD LOG:  00000: duration: 2781.000 ms  statement: SELECT
	  tt.SmiShortName AS СМИ,
	  CAST(COUNT(tt.ClientID) AS INTEGER) AS Количество_фирм_в_номере 
	FROM 
	(SELECT DISTINCT
	   SmiShortName,
	   ClientID
	FROM Analitic a
	WHERE 
	  a.SmiId='APPS000011' and
	  a.NomerSmi>=766 and
	  a.NomerSmi<=771 and
	  (a.SumWithNDS>0 or a.SumWithNDS+0>0)
	
	)  as tt
	GROUP BY tt.SmiShortName
	ORDER BY tt.SmiShortName

Версия postger 8.3.7, Win2K
pgAdmin 1.10b2, Win2K
База объявлена вот так, кодировка WIN1251

CREATE DATABASE "IS2004"
  WITH OWNER = postgres
       ENCODING = 'WIN1251'
       CONNECTION LIMIT = -1;
ALTER DATABASE "IS2004" SET search_path=ctu_work, pg_catalog, public, ctu_archiv;

vzdor

Дата: 05.05.2009 02:15:44

SeniorAndre

Дата: 05.05.2009 08:28:25

для 1.8.4 show client_encoding => UNICODE
для 1.10b2 show client_encoding => UNICODE

vzdor

Дата: 05.05.2009 09:42:32

set client_encoding='win';

vzdor

Дата: 05.05.2009 10:38:35

сначала написал, потом начал проверять :)

запускаю ошибку в разных кодировках клиента и сервера (что указываю в тексте ошибки)

в кодировке просмотра utf-8 лог выглядит так:
2009-05-05 17:23:33 VLAST STATEMENT: select ‘s-utf8 cl-utf8 вдаплдво ваэ’xd d
2009-05-05 17:24:42 VLAST STATEMENT: select ‘s-utf8 cl-win вдаплдво ваэ’xd d
2009-05-05 17:25:33 VLAST STATEMENT: select ‘s-WIN1251 cl-win вдаплдво ваэ’xd d
2009-05-05 17:26:06 VLAST STATEMENT: select ‘s-WIN1251 cl-utf8 㥠𐬤㬠㡽’xd d

в кодировке win1251 так:
2009-05-05 17:23:33 VLAST STATEMENT: select ‘s-utf8 cl-utf8 вдаплдво ваэ’xd d
2009-05-05 17:24:42 VLAST STATEMENT: select ‘s-utf8 cl-win вдаплдво ваэ’xd d
2009-05-05 17:25:33 VLAST STATEMENT: select ‘s-WIN1251 cl-win вдаплдво ваэ’xd d
2009-05-05 17:26:06 VLAST STATEMENT: select ‘s-WIN1251 cl-utf8 вдаплдво ваэ’xd d

SeniorAndre

Дата: 05.05.2009 16:06:50

Только не понтно как это можно использовать в pgAdmin на Win, т.к. настройки нет в QueryTools своя сессия и она ни как не влияет на client_encoding другого коннекта и тем более на отображение лога.

vzdor

Дата: 06.05.2009 02:16:19

SeniorAndre
Только не понтно как это можно использовать в pgAdmin на Win, т.к. настройки нет в QueryTools своя сессия и она ни как не влияет на client_encoding другого коннекта и тем более на отображение лога.

Лог пишется в кодировке клиента и/или базы, а открывается для просмотра в кодировке юникод, поэтому не все читается. Вы в курсе, в какой кодировке открывал файлы pgAdmin 1.10?

Предлагаю вам проделать такой же эксперимент, как сделал я — это занимает минут 10

SeniorAndre

Дата: 06.05.2009 08:23:51

К сожалению я не властен над тем в какой кодировке открывает файлы pgAdmin и в какой копирует в буфер обмена. И ваш эксперемент поставленный в окне Query будет работать, но что дальше делать с этим?

SeniorAndre

Дата: 08.05.2009 09:45:42

pgAdmin 1.10.0 beta3 — таже фигня, кирилица в отображении лога ломаная. :((

Ёш

Дата: 10.05.2009 02:04:14

Понравилась статья? Поделить с друзьями:

Интересное по теме:

  • Peugeot ошибка p3011
  • Pes 2015 ошибка 0xc0000142
  • Pes 2014 системная ошибка
  • Pervasive ошибка 3016
  • Permission denied ошибка на андроиде

  • Добавить комментарий

    ;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: