本節ではそれぞれのメッセージの詳細書式について説明します。 それぞれにはフロントエンド(F)、バックエンド(B)あるいは双方(F & B)から送出されることを示す印が付いています。 各メッセージには先頭にバイト数を持っていますが、バイト数を参照しなくてもメッセージの終わりを検知できるようにメッセージ書式は定義されています。 これは有効性検査を補助します。 (CopyDataメッセージはデータストリームの一部を形成しますので例外です。 個々のCopyDataメッセージの内容は自身でも解釈することができません。)
認証要求としてメッセージを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
認証が成功したことを指定します。
メッセージを認証要求として識別します。
自身を含むメッセージ内容のバイト単位の長さ。
Kerberos V5認証が必要であることを指定します。
メッセージを認証要求として識別します。
自身を含むメッセージ内容のバイト単位の長さ。
平文パスワードが必要であることを指定します。
メッセージが認証要求であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
MD5暗号化パスワードが必要であることを指定します。
パスワード暗号化用ソルトです。
メッセージが認証要求であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
SCM資格証明メッセージが必要であることを指定します。
メッセージが認証要求であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
GSSAPI認証証明メッセージが必要であることを指定します。
メッセージが認証要求であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
このデータがGSSAPIあるいはSSPIデータを含むことを指定します。
n
GSSAPIあるいはSSPI認証データ。
メッセージが認証要求であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
SSPI認証が要求されていることを指定します。
メッセージが認証要求であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
SASL認証が必要であることを指定します。
メッセージ本体はSASL認証機構をサーバにとって望ましい順に並べたリストです。 最後の認証機構名の後に終端子としてゼロのバイトを置く必要があります。 各機構は以下のようになります。
SASL認証機構の名前です。
このメッセージが認証要求であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
このメッセージがSASLのチャレンジを含むことを指定します。
n
使用するSASL機構に固有のSASLデータです。
このメッセージが認証要求であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
SASL認証が完了したことを指定します。
n
SASLの結果の「追加データ」で、使用するSASL機構に固有のものです。
メッセージが取り消しのキーデータであることを識別します。 フロントエンドが後でCancelRequestメッセージを発行できるようにするためには、これらの値を保存しておかなければなりません。
自身を含むメッセージ内容のバイト単位の長さ。
このバックエンドのプロセスIDです。
このバックエンドの秘密鍵です。
このメッセージがBindコマンドであることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
宛先ポータルの名前(空文字列にすると無名ポータルを選択します)。
入力元のプリペアド文の名前(空文字列にすると無名のプリペアド文を選択します)。
その後に続くパラメータ書式コードの数(以下ではC
で表します)。
これは、パラメータがない、またはパラメータはすべてデフォルトの書式(テキスト)を使うことを示す0、あるいは指定の書式コードがすべてのパラメータに適用されることを示す1にすることができます。
そうでなければ、実際のパラメータの数と同じになります。
C
]
パラメータ書式コードです。 現在はそれぞれが0(テキスト)あるいは1(バイナリ)でなければなりません。
後続するパラメータ値の数 (ゼロの場合もあります)。 これは問い合わせが必要とするパラメータ数と一致する必要があります。
次に、各パラメータに対して、以下のフィールドのペアが現れます。
パラメータ値のバイト単位の長さ(これには自身は含まれません)。 ゼロにすることもできます。 特別な場合として、-1はNULLというパラメータ値を示します。 NULLの場合、後続の値用のバイトはありません。
n
関連する書式コードで示される書式におけるパラメータの値。
n
は上述の長さです。
最後のパラメータの後に、以下のフィールドが現れます。
後続する結果列書式コードの数
(以下ではR
で表します)。
これは、結果列が存在しないことを示す0、あるいはすべての結果列が(もしあれば)デフォルトの書式コード(テキスト)を使用することを示す1にすることができます。
さもなくば、問い合わせの結果列の実際の数と同じになります。
R
]
結果列の書式コード。 現在それぞれは0(テキスト)もしくは1(バイナリ)のいずれかでなければなりません。
メッセージがBind完了指示子であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
自身を含むメッセージ内容のバイト単位の長さ。
取消要求コードです。
この値は、最上位16ビットに1234
が、下位16ビットに5678
を持つように選択されています。
(混乱を防ぐため、このコードはプロトコルバージョン番号と同一になってはいけません。)
対象バックエンドのプロセスIDです。
対象バックエンドの秘密鍵です。
メッセージがCloseコマンドであることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
プリペアド文を閉ざす時は'S
'。
ポータルを閉ざす時は'P
'です。
閉ざすプリペアド文またはポータルの名前です (空文字列で無名のプリペアド文または無名ポータルを選択します)。
メッセージがClose完了指示子であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
メッセージがコマンド完了応答であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
コマンドタグです。 これは通常どのSQLコマンドが完了したかを表す単一の単語です。
INSERT
コマンドの場合、タグはINSERT
です。
ここでoid
rows
rows
は挿入された行数です。
かつてoid
は、rows
が1、かつ、対象テーブルがOIDを持つ場合、挿入された行のオブジェクトIDでしたが、もはやOID列はサポートされていません。
ですからoid
は常に0です。
DELETE
コマンドの場合、タグはDELETE
です。
ここでrows
rows
は削除された行数です。
UPDATE
コマンドの場合、タグはUPDATE
です。
ここでrows
rows
は更新された行数です。
SELECT
またはCREATE TABLE AS
の場合、タグはSELECT
となります。
ここでrows
rows
は取り込んだ行数です。
MOVE
コマンドの場合、タグはMOVE
です。
ここでrows
rows
は、カーソル位置が何行変更されたかを示す数です。
FETCH
コマンドの場合、タグはFETCH
です。
ここでrows
rows
は、カーソルから何行取り出したかを示す行数です。
COPY
コマンドの場合、タグはCOPY
です。
ここでrows
rows
は、コピーされた行数です(注意:この行数はPostgreSQL 8.2以降でのみ出力されます)。
メッセージがデータのCOPY
であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
n
COPY
データストリームの一部を形成するデータです。
バックエンドから送信されるメッセージは、常に1つのデータ行に対応します。
しかし、フロントエンドから送信されるメッセージは任意のデータストリームに分割される可能性があります。
メッセージがCOPY
完了指示子であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
メッセージがCOPY
失敗指示子であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
失敗の原因を報告するエラーメッセージです。
メッセージがStart Copy Inの応答であることを識別します。 フロントエンドはここで必ずコピーインデータを送信しなければなりません (まだ準備ができていない場合はCopyFailメッセージを送信してください)。
自身を含むメッセージ内容のバイト単位の長さ。
0はCOPY
全体の書式がテキスト(行は改行で区切られ、列は区切り文字などで区切られます)であることを示します。
1は、コピー全体の書式がバイナリ(DataRowの書式と同様)であることを示します。
より詳細についてはCOPYを参照してください。
コピーされるデータ内の列数です
(以下ではN
と表されます)。
N
]
各列で使用される書式コードです。 現在それぞれは0(テキスト)または1(バイナリ)でなければなりません。 コピー全体の書式がテキストの場合、すべてが0でなければなりません。
メッセージがStart Copy Outの応答であることを識別します。 このメッセージの後にコピーアウトデータが続きます。
自身を含むメッセージ内容のバイト単位の長さ。
0はCOPY
全体の書式がテキスト(行は改行で区切られ、列は区切り文字などで区切られます)であることを示します。
1はコピー全体の書式がバイナリ(DataRowの書式同様)であることを示します。
詳細についてはCOPYを参照してください。
コピーされるデータ内の列数です
(以下ではN
と表されます)。
N
]
各列で使用される書式コードです。 現在それぞれは0(テキスト)または1(バイナリ)でなければなりません。 コピー全体の書式がテキストの場合、すべてが0でなければなりません。
メッセージがStart Copy Bothの応答であることを識別します。 このメッセージはストリーミングレプリケーションのみで使用されます。
自身を含むメッセージ内容のバイト単位の長さ。
0はCOPY
全体の書式がテキスト(行は改行で区切られ、列は区切り文字などで区切られます)であることを示します。
1はコピー全体の書式がバイナリ(DataRowの書式同様)であることを示します。
詳細についてはCOPYを参照してください。
コピーされるデータ内の列数です
(以下ではN
と表されます)。
N
]
各列で使用される書式コードです。 現在それぞれは0(テキスト)または1(バイナリ)でなければなりません。 コピー全体の書式がテキストの場合、すべてが0でなければなりません。
メッセージがデータ行であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
後に続く列値の数です (ゼロの場合もあります)。
次に、各列について以下のフィールドのペアが現れます。
列値のバイト単位の長さです (これには自身は含まれません)。 ゼロとすることもできます。 特別な場合として、-1はNULLという列値を示します。 NULLの場合、後続の値用のバイトはありません。
n
関連する書式コードで示される書式における列の値。
n
は上述の長さです。
メッセージがDescribeコマンドであることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
プリペアド文の記述の場合は'S
'。
ポータルの記述の場合は'P
'です。
記述を求めるプリペアド文またはポータルの名前です (空文字列で無名のプリペアド文または無名ポータルを選択します)。
メッセージが空の問い合わせ文字列に対する応答であることを識別します (これはCommandCompleteを置き換えます)。
自身を含むメッセージ内容のバイト単位の長さ。
メッセージがエラーであることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
このメッセージの本体には、ゼロバイトを終端として後続する、1つ以上の識別されるフィールドが含まれます。 フィールドは任意の順番で現れる可能性があります。 各フィールドには以下があります。
フィールド種類を識別するコードです。 ゼロならば、メッセージの終端であり、後続する文字列がないことを表します。 53.8に、現時点でフィールド種類として定義されているものを列挙します。 将来もっと多くのフィールド種類が追加される可能性がありますので、フロントエンドは、認知できない種類のフィールドに対して何もせずに無視すべきです。
フィールド値です。
メッセージがExecuteコマンドであることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
実行するポータルの名前です。 (空文字列で無名ポータルを選択します)。
ポータルが行を返す問い合わせの場合、返される行数の最大値です (他の問い合わせでは無視されます)。 ゼロは「無制限」を表します。
メッセージがFlushコマンドであることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
メッセージが関数呼び出しであることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
呼び出す関数のオブジェクトIDを指定します。
後述する引数書式コード数です
(以下ではC
と表します)。
これは、引数が存在しない、あるいは、すべての引数がデフォルトの書式(テキスト)を使用することを示す0に、指定する書式コードをすべての引数に適用することを示す1にすることができます。
さもなくば、これは実際の引数の数と同じになります。
C
]
引数の書式コードです。 それぞれは、0(テキスト)もしくは1(バイナリ)でなければなりません。
関数に提供する引数の数を指定します。
次に、各引数に対して以下のフィールドのペアが現れます。
引数の値のバイト単位の長さです (これには自身は含まれません)。 0とすることもできます。 特別な場合として、-1はNULLという引数の値を示します。 NULLの場合、後続の値用のバイトはありません。
n
関連する書式コードで示される書式における引数の値。
n
は上述の長さです。
最後の引数の後に、以下のフィールドが現れます。
関数結果用の書式コードです。 現在、0(テキスト)または1(バイナリ)でなければなりません。
メッセージが関数呼び出しの結果であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
関数の結果の値のバイト単位の長さです (これには自身は含まれません)。 ゼロとすることもできます。 特別な場合として、-1はNULLという関数の結果の値を示します。 NULLの場合、後続の値用のバイトはありません。
n
関連する書式コードで示される書式における関数の結果の値。
n
は上述の長さです。
自身を含むメッセージ内容のバイト単位の長さ。
GSSAPI暗号化要求コードです。
この値は、最上位16ビットに1234
が、下位16ビットに5680
を持つように選択されています。
(混乱を防ぐため、このコードはプロトコルバージョン番号と同一になってはいけません。)
このメッセージがGSSAPIまたはSSPI応答であることを識別します。 これはSASLおよびパスワードの応答メッセージにも使用されることに注意してください。 厳密なメッセージ種別は、その状況から推論できます。
自身を含むメッセージ内容のバイト単位の長さ。
n
GSSAPI/SSPIに固有のメッセージデータ。
メッセージが、プロトコルバージョン交渉メッセージであることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
クライアントが要求したメジャープロトコルバージョンに対し、サーバがサポートする最新のマイナープロトコルバージョン。
サーバが認識しなかったプロトコルオプションの数。
続いて、サーバが認識しなかったプロトコルオプションに対して以下が続きます。
オプション名。
メッセージがデータなしの指示子であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
メッセージが警報であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
このメッセージの本体には、ゼロバイトを終端として後続する、1つ以上の識別されるフィールドが含まれます。 フィールドは任意の順番で現れる可能性があります。 各フィールドには以下があります。
フィールド種類を識別するコードです。 ゼロならば、メッセージの終端であり、後続する文字列がないことを表します。 53.8に、現時点でフィールド種類として定義されているものを列挙します。 将来もっと多くのフィールド種類が追加される可能性がありますので、フロントエンドは、認知できない種類のフィールドに対して何もせずに無視すべきです。
フィールドの値です。
メッセージが通知応答であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
通知元バックエンドのプロセスIDです。
通知の発生元となったチャネル名です。
通知プロセスから渡される「ペイロード」文字列です。
メッセージがパラメータ記述であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
文で使用されるパラメータ数です (ゼロとすることができます)。
そして、各パラメータに対して、以下が続きます。
パラメータのデータ型のオブジェクトIDを指定します。
メッセージが実行時パラメータ状態報告であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
報告される実行時パラメータの名前です。
そのパラメータの現在値です。
メッセージがParseコマンドであることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
宛先のプリペアド文の名前です (空文字列で無名のプリペアド文を選択します)。
解析される問い合わせ文字列です。
指定されるパラメータデータ型の数です (ゼロとすることができます)。 これは、問い合わせ文字列内にあるパラメータの数を示すものではないことに注意してください。 フロントエンドが型指定を希望するパラメータの数でしかありません。
その後、各パラメータに対し、以下が続きます。
パラメータのデータ型のオブジェクトIDを指定します。 ここにゼロを書くことは型指定を行わないことと同じです。
メッセージがParse完了指示子であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
メッセージがパスワード応答であることを識別します。 これがGSSAPI、SSPIまたはSASL応答メッセージでも使用されることに注意してください。 厳密なメッセージ種別は、その状況から推論できます。
自身を含むメッセージ内容のバイト単位の長さ。
パスワードです (必要ならば暗号化されています)。
メッセージがポータル中断指示子であることを識別します。 これは、Executeメッセージの行数制限に達した場合にのみ現れることに注意してください。
自身を含むメッセージ内容のバイト単位の長さ。
メッセージが簡易問い合わせであることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
問い合わせ文字列自体です。
このメッセージ種類を識別します。 バックエンドで新しい問い合わせサイクルの準備が整った時には常にReadyForQueryが送信されます。
自身を含むメッセージ内容のバイト単位の長さ。
現在のバックエンドのトランザクション状態指示子です。
取り得る値は、待機状態(トランザクションブロックにない状態)に'I
'、トランザクションブロック内の場合に'T
'、失敗したトランザクションブロック(ブロックが終わるまで問い合わせは拒絶されます)内の場合に'E
'です。
メッセージが行の記述であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
行内のフィールド数を指定します (ゼロとすることができます)。
その後、各フィールドに対して以下が続きます。
フィールド名です。
フィールドが特定のテーブルの列として識別できる場合、テーブルのオブジェクトIDです。 さもなくばゼロです。
フィールドが特定のテーブルの列として識別できる場合、列の属性番号です。 さもなくばゼロです。
フィールドのデータ型のオブジェクトIDです。
データ型の大きさ(pg_type.typlen
を参照)です。
負の値が可変長の型を表すことに注意してください。
型修飾子(pg_attribute.atttypmod
を参照)です。
修飾子の意味は型に固有です。
フィールドに使用される書式コードです。 現在、0(テキスト)または1(バイナリ)のいずれかになります。 RowDescriptionがステートメント用のDescribeから返された場合、書式コードはまだ不明ですので、常に0になります。
メッセージが最初のSASL応答であることを識別します。 これがGSSAPI、SSPIまたはパスワード応答メッセージでも使用されることに注意してください。 厳密なメッセージ種別は、その状況から推論できます。
自身を含むメッセージ内容のバイト単位の長さ。
クライアントが選択したSASL認証機構の名前。
それに続くSASLの機構固有の「Initial Client Response(最初のクライアントの応答)」の長さ、またはInitial Responseがなければ-1。
n
SASLの機構固有の「Initial Response(最初の応答)」。
メッセージがSASL応答であることを識別します。 これがGSSAPI、SSPIまたはパスワード応答メッセージでも使用されることに注意してください。 厳密なメッセージ種別は、その状況から推論できます。
自身を含むメッセージ内容のバイト単位の長さ。
n
SASLの機構固有のメッセージデータ
自身を含むメッセージ内容のバイト単位の長さ。
SSL要求コードです。
この値は最上位の16ビットに1234
が、最下位の16ビットに5679
が含まれるように選択されます。
(混乱を防ぐため、このコードはどのプロトコルのバージョン番号とも同じになってはいけません。)
自身を含むメッセージ内容のバイト単位の長さ。
プロトコルのバージョン番号です。 最上位の16ビットはメジャーバージョン番号(ここで説明しているプロトコルでは3)です。 最下位の16ビットはマイナーバージョン番号(ここで説明しているプロトコルでは0)です。
プロトコルのバージョン番号の後には、パラメータ名と値文字列の対が1つ以上続きます。
最後の名前/値の対の後に終端子としてゼロのバイトが必要です。
パラメータは任意の順番に並べることができます。
user
が必須、他はオプションです。
各パラメータは以下のように指定します。
パラメータ名です。 現在認識される名前を以下に示します。
user
接続するデータベースユーザ名です。 必須。 デフォルトはありません。
database
接続するデータベースです。 デフォルトはユーザ名です。
options
バックエンド用のコマンドライン引数です。
(これは廃棄予定であり、個々の実行時パラメータを設定する方が好ましいです。)
この文字列の中の空白は、バックスラッシュ(\
)でエスケープされていなければ、引数を分けるためのものとみなされます。
バックスラッシュそのものを表すためには\\
と書いてください。
replication
ストリーミングレプリケーションモードで接続するのに使用され、SQL文の代わりにレプリケーションコマンドの小さな集合を発行することができます。
値はtrue
、false
またはdatabase
をとることができ、デフォルトはfalse
です。
詳細は53.4を参照してください。
上記に加え、他のパラメータが列挙される可能性があります
_pq_.
で始まるパラメータ名は、プロトコルの拡張用途のために予約されています。
それ以外は、バックエンド開始時に設定される実行時パラメータとして扱われます。
こうした設定は、バックエンド起動時に(もしあればコマンドライン引数の解析の後に)適用されます。
この値はセッションのデフォルトとして動作します。
パラメータの値です。
メッセージがSyncコマンドであることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。
メッセージが終了であることを識別します。
自身を含むメッセージ内容のバイト単位の長さ。