本節では、ErrorResponseおよびNoticeResponseメッセージ内で現れる可能性があるフィールドについて説明します。 それぞれのフィールド種類は、単一バイトの識別子トークンを持ちます。 メッセージ内に与えられる任意のフィールド種類は、多くてもメッセージ当たり1つでなければならないことに注意してください。
S
深刻度です。
フィールドの内容はERROR
、FATAL
、PANIC
(エラーメッセージ内)、WARNING
、NOTICE
、DEBUG
、INFO
、LOG
(警報メッセージ内)、もしくはこれらの1つの地域化された翻訳です。
常に存在します。
V
深刻度です。
フィールドの内容はERROR
、FATAL
、PANIC
(エラーメッセージ内)、WARNING
、NOTICE
、DEBUG
、INFO
、LOG
(警報メッセージ内)です。
これは、その内容が決して地域化されないという点以外はS
フィールドと同一です。
これはPostgreSQLバージョン9.6以降で生成されたメッセージにだけあります。
C
コード、そのエラー用のSQLSTATEコードです(付録Aを参照)。 地域化されません。 常に存在します。
M
メッセージ、主に人にわかりやすいエラーメッセージです。 これは正確、簡潔でなければなりません(通常は1行です)。 常に存在します。
D
詳細です。 問題のより詳細を説明する省略可能な二次的なエラーメッセージです。 複数行にまたがる可能性があります。
H
ヒントです。 その問題にどう対応するかを表す省略可能な提言です。 これは、詳細と異なり、事実ではなく提案(不適切な場合もありますが)を提供することを目的としたものです。 複数行にまたがる可能性があります。
P
位置です。 フィールド値は、エラーカーソルの位置を示すもので、元の問い合わせ文字列へのインデックスを10進ASCIIで表した整数です。 先頭の文字がインデックス1になり、位置はバイトではなく文字で数えられます。
p
内部的位置です。
これはP
と同じ定義ですが、カーソルの位置がクライアントによって発せられたコマンドではなく内部的に生成されたコマンドを参照する場合に使用されます。
このフィールドが現れる時には常にq
も現れます。
q
内部的問い合わせ。 失敗した、内部生成のコマンドテキストです。 これは例えば、PL/pgSQL関数によって発行されたSQL問い合わせなどです。
W
場所です。 エラーが発生したコンテキストを示します。 現在ここには、実行中の手続き言語関数と内部生成問い合わせの呼び出しスタックトレースバックが含まれます。 この追跡情報は、1行当たり1項目として、最も最近のものが初めに現れます。
s
スキーマ名。 エラーが特定のデータベースオブジェクトに関連する場合、そのオブジェクトを含むスキーマ名。 無名でなければ。
t
テーブル名。 エラーが特定のテーブルに関連する場合、そのテーブル名。 (スキーマ名フィールドにおいて、そのテーブルのスキーマ名を参照します。)
c
列名。 エラーが特定のテーブルの列に関連する場合、その列名。 (テーブルを識別するため、スキーマ名とテーブル名のフィールドを参照します。)
d
データ型名。 エラーが特定のデータ型に関連する場合、そのデータ型名。 (スキーマ名フィールドにおいて、そのデータ型のスキーマ名を参照します。)
n
制約名。 エラーが特定の制約に関連する場合、その制約名。 上に列挙したフィールドにおいて、関連するテーブルまたはドメインを参照します。 (この目的のために、制約の構文のもとに作成されていない場合でも、インデックスは制約として扱われます。)
F
ファイルです。 エラーを報告した、ソースコードのファイル名です。
L
行です。 エラーを報告した、ソースコードの行番号です。
R
ルーチンです。 エラーを報告した、ソースコードのルーチン名です。
スキーマ名、テーブル名、列名、データ型名および制約名のフィールドは、限られたエラー型のためにしか提供されません。 付録Aを参照してください。 フロントエンドは、これらのフィールドの一部の存在が、他のフィールドの存在も保障すると仮定してはいけません。 上記の相互関係により主なエラーの原因を探す方法がありますが、ユーザが定義した関数は他の方法でこれらのフィールドを利用できるかもしれません。 同様の理由により、クライアントはこれらのフィールドが、現在のデータベースにおける適切なオブジェクトを示すと仮定してはいけません。
クライアントには、必要な情報を表示する際、整形する責任があります。 具体的には、必要に応じて長い行を分割しなければなりません。 エラーメッセージフィールド内にある改行文字は、改行ではなく、段落の区切りとして扱わなければなりません。