他のバージョンの文書 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

48.6. エラーおよび警報メッセージフィールド

本節では、ErrorResponseおよびNoticeResponseメッセージ内で現れる可能性があるフィールドについて説明します。 それぞれのフィールド種類は、単一バイトの識別子トークンを持ちます。 メッセージ内に与えられる任意のフィールド種類は、多くてもメッセージ当たり1つでなければならないことに注意してください。

S

深刻度です。 フィールドの内容はERRORFATALPANIC(エラーメッセージ内)、WARNINGNOTICEDEBUGINFOLOG(警報メッセージ内)、もしくはこれらの1つの地域化された翻訳です。 常に存在します。

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を参照してください。 フロントエンドはこれらのフィールドのいかなる存在もその他のフィールドの存在を保証するものと予測してはなりません。コアエラーの原因は上記に記載された相互関係を監視しますが、ユーザ定義の関数はこれらのフィールドを別の使い道で使用しているかもしれません。同様の脈絡で、クライアントはこれらのフィールドが現在のデータベースにおいて同時に存在するオブジェクトと想定してはなりません。

クライアントには、必要な情報を表示する際、整形する責任があります。 具体的には、必要に応じて長い行を分割しなければなりません。 エラーメッセージフィールド内にある改行文字は、改行ではなく、段落の区切りとして扱わなければなりません。