Работаю в PostgreSQL 9.4 (база в кодировке UNICODE) на Delphi 7. Вопроса 2.
1. При возникновении ошибок драйвер выдает только первую строку от сообщение от сервера:
SQL Server error: operator does not exist: integer = character varying
однако SQL Manager for PostgreSQL выдает более понятную диагностику
SQL Server error: operator does not exist: integer = character varying
LINE 1: select INV_PORT FROM data.D_B_TDBS where DOC=varchar '124669...
^
Можно не обрезать сообщение от сервера?
2. При выдачи на сервере исключения на русском языке, например:
RAISE EXCEPTION '%', 'Попытка продублировать код ISO'
Драйвер выдает абракадабру
SQL Server error: 'Ïîïûòêà ïðîäóáëèðîâàòü êîä ISO'
SQL Manager for PostgreSQL выдает правильно:
SQL Server error: Попытка продублировать код ISO
Если на сервере исключение выдать с перекодировкой
RAISE EXCEPTION '%', convert_from(Message::bytea, 'WIN1251')
то тогда все наоборот, драйвер выдает правильно, а SQL Manager for PostgreSQL - нет.
Как настроить драйвер на выдачу сообщений в правильной кодировке?
Выдача ошибок в драйвере PostgreSQL
Re: Выдача ошибок в драйвере PostgreSQL
1. 'LINE 1: select INV_PORT FROM data.D_B_TDBS where DOC=varchar '124669...' - эту часть сообщения генерирует парсер SQL Manager for PostgreSQL на основе информации, которую возвращает PostgreSQL:
- номер ошибки;
- текст ошибки 'operator does not exist: integer = character varying';
- № строки, № позиции в строке и место возникновения ошибки в текстовом формате;
Драйвер же возвращает в приложение только номер и текст ошибки, т.к. ограничения технологии dbExpress не позволяют передавать в приложение дополнительную информацию.
2. Мы воспроизвели описанное вами поведение и исследуем его. Мы сообщим вам о результатах.
- номер ошибки;
- текст ошибки 'operator does not exist: integer = character varying';
- № строки, № позиции в строке и место возникновения ошибки в текстовом формате;
Драйвер же возвращает в приложение только номер и текст ошибки, т.к. ограничения технологии dbExpress не позволяют передавать в приложение дополнительную информацию.
2. Мы воспроизвели описанное вами поведение и исследуем его. Мы сообщим вам о результатах.