52.8. Поля сообщений об ошибках и уведомлениях#
52.8. Поля сообщений об ошибках и уведомлениях #
В этом разделе описываются поля, которые могут появляться в сообщениях ErrorResponse и NoticeResponse. Каждый тип поля имеет однобайтовый идентификационный компонент. Обратите внимание, что любой заданный тип поля должен появляться не более одного раза в каждом сообщении.
S
Серьезность: содержимое поля -
ERROR
,FATAL
илиPANIC
(в сообщении об ошибке), илиWARNING
,NOTICE
,DEBUG
,INFO
илиLOG
(в сообщении-уведомлении), или локализованный перевод одного из этих значений. Всегда присутствует.V
Severity: содержимое поля -
ERROR
,FATAL
илиPANIC
(в сообщении об ошибке), илиWARNING
,NOTICE
,DEBUG
,INFO
илиLOG
(в сообщении-уведомлении). Это идентично полюS
, за исключением того, что содержимое никогда не локализуется. Присутствует только в сообщениях, созданных в PostgreSQL версии 9.6 и более поздних.C
Код: код SQLSTATE для ошибки (см. Предметный указатель A). Не подлежит локализации. Всегда присутствует.
M
Сообщение: основное человеко-читаемое сообщение об ошибке. Оно должно быть точным, но кратким (обычно одна строка). Всегда присутствует.
D
Детали: дополнительное необязательное сообщение об ошибке, содержащее более подробную информацию о проблеме. Может занимать несколько строк.
H
Подсказка: необязательное предложение о том, что делать с проблемой. Предназначено отличаться от Detail тем, что предлагает советы (возможно, неуместные), а не жесткие факты. Может занимать несколько строк.
P
Положение: значение поля представляет собой десятичное ASCII-целое число, указывающее позицию курсора ошибки в виде индекса в исходной строке запроса. Первый символ имеет индекс 1, а позиции измеряются в символах, а не в байтах.
p
Внутренняя позиция: это определено так же, как и поле
P
, но используется, когда позиция курсора относится к внутренне сгенерированной команде, а не к команде, представленной клиентом. Полеq
всегда будет присутствовать, когда появляется это поле.q
Внутренний запрос: текст неудачной внутренне-сгенерированной команды. Это может быть, например, SQL-запрос, выполняемый функцией PL/pgSQL.
W
Где: указание контекста, в котором произошла ошибка. В настоящее время это включает трассировку стека вызовов активных функций процедурного языка и внутренне сгенерированные запросы. Трассировка представляет собой одну запись на строку, самую последнюю вначале.
s
Имя схемы: если ошибка была связана с конкретным объектом базы данных, то это имя схемы, содержащей этот объект, если таковая имеется.
t
Имя таблицы: если ошибка связана с конкретной таблицей, то указывается имя таблицы. (См. поле имени схемы для имени схемы таблицы).
c
Имя столбца: если ошибка связана с конкретным столбцом таблицы, имя столбца. (См. поля схемы и имени таблицы для идентификации таблицы).
d
Имя типа данных: если ошибка связана с определенным типом данных, имя этого типа данных. (См. поле имени схемы для имени схемы типа данных).
n
Имя ограничения: если ошибка была связана с конкретным ограничением, то это имя ограничения. См. поля, перечисленные выше, для связанной таблицы или домена. (В этом контексте индексы рассматриваются как ограничения, даже если они не были созданы с использованием синтаксиса ограничений).
F
Файл: имя файла местоположения исходного кода, где была обнаружена ошибка.
L
Строка: номер строки местоположения исходного кода, где была обнаружена ошибка.
R
процедура: имя процедуры исходного кода, сообщающей об ошибке.
Примечание
Поля для имени схемы, имени таблицы, имени столбца, имени типа данных и имени ограничения предоставляются только для ограниченного числа типов ошибок; см. Предметный указатель A. Клиенты не должны предполагать, что наличие любого из этих полей гарантирует наличие другого поля. Ядро источников ошибок соблюдает указанные выше взаимосвязи, но пользовательские определенные функции могут использовать эти поля иным образом. В том же духе, клиенты не должны предполагать, что эти поля обозначают современные объекты в текущей базе данных.
Клиент несет ответственность за форматирование отображаемой информации в соответствии с его потребностями; в частности, он должен разбивать длинные строки по мере необходимости. Символы новой строки, появляющиеся в полях сообщений об ошибках, должны рассматриваться как разрывы абзацев, а не строк.