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