ここではそれぞれのメッセージの形式について記載します。それぞれはフロントエンド(F)、postmaster とバックエンド (B) あるいは双方(F & B)から送出されます。
メッセージが ASCIIデータ行であることを示します(先行するRowDescriptionメッセージで行の中のフィールド数とそのデータ型を定義します)。
行の各フィールドに1ビットずつ対応するビットマップです。第1 フィールドは第1バイトのビット7(MSB)に対応し、第2フィールドは第1バイトのビット6、第8フィールドは第1バイトのビット0(LSB)、第9フィールドは第2バイトのビット7といった順で対応します。対応するフィールドの値がNULLでない限りそれぞれのビットが立てられます。もしフィールド数が8の倍数でない場合には、ビットマップにおける最後のバイトの余りは不要となります。
値がNULLでないそれぞれのフィールドに対して以下があります。
このサイズを含めたフィールドの値の大きさを指定します。
ASCII文字でのフィールドの値そのものの指定です。 nは上記のサイズから4を引いたものです。 フィールドデータの最後にはゼロのバイトが付いていません。 必要ならフロントエンドが付加しなければいけません。
メッセージが認証要求であることを示します。
認証が成功したことを示します。
メッセージが認証要求であることを示します。
Kerberos V4の認証が必要なことを指定します。
メッセージが認証要求であることを示します。
Kerberos V5の認証が必要なことを指定します。
メッセージが認証要求であることを示します。
平文パスワードが必要であることを指定します。
メッセージが認証要求であることを示します。
crypt() による暗号化パスワードが必要であることを指定します。
パスワードを暗号化するときに使用するソルトです。
メッセージが認証要求であることを示します。
MD5 暗号化パスワードが必要であることを指定します。
パスワードを暗号化するときに使用するソルトです。
メッセージが認証要求であることを示します。
SCM 資格証明メッセージが必要であることを指定します。
メッセージが取り消しの鍵データであることを示します。フロントエンドは後でCancelRequestメッセージを出すのであればこれらの値を保存しておかなければなりません。
このバックエンドのプロセスIDです。
このバックエンドの秘密キーです。
メッセージがバイナリデータ行であることを示します(先行する RowDescription メッセージで行の中のフィールド数とそのデータ型を定義します)。
行の各フィールドに1ビットずつ対応するビットマップです。第1 フィールドは第1バイトのビット7(MSB)に対応し、第2フィールドは第1バイトのビット6、第8フィールドは第1バイトのビット0(LSB)、第9フィールドは第2バイトのビット7といった順で対応します。対応するフィールドの値がNULLでない限りそれぞれのビットが立てられます。もしフィールド数が8の倍数でない場合には、ビットマップにおける最後のバイトの余りは不要となります。
値がNULLでないそれぞれのフィールドに対して以下があります。
このサイズを含めないフィールドの値の大きさを指定します。
バイナリ形式でのフィールドそのものの値を指定します。 nは上記のサイズです。
バイト数によるパケットのサイズです。
取り消し要求のコード。 最上位16ビットに 1234 、最下位16ビットに5678 を含むような値が選ばれます(混乱を避けるため、このコードは他のプロトコルバージョンとは同一でありません)。
目的とするバックエンドのプロセスIDです。
目的とするバックエンドの秘密キーです。
メッセージが完了した回答であることを示します。
コマンドタグ。 これは通常どのSQL命令が完了したかを示す1単語です。
INSERT コマンドの場合、このタグは INSERT oid rows です。 ただし、rows は挿入された行の数を示します。 また、oid は、rows が 1 の場合、挿入された行のオブジェクト ID を示します。 さもなくば、oid は 0 となります。
DELETE コマンドの場合、このタグは DELETE rows です。 ただし、rows は削除された行の数です。
UPDATE コマンドの場合、このタグは UPDATE rows です。 ただし、rows は更新された行の数です。
連続する行データで、各行はByte1('\n')で終わります。すべてのデータの一番最後にはByte1('\\')、Byte1('.')、Byte1('\n')という文字の並びが付きます。
メッセージが「コピーインの開始」であることを示します。 フロントエンドはここで、CopyDataRowsメッセージを送信しなければなりません。
メッセージが「コピーアウトの開始」であることを示します。 このコマンドには、さらにCopyDataRowsメッセージが続きます。
メッセージがカーソル回答であることを識別します。
カーソルの名称。カーソル名を明示的に指定しなかった場合、これは "blank"という文字列になります。
メッセージが空の問い合わせ文字列の回答であることを示します。
未使用。
メッセージがエラーメッセージであることを識別します。
エラーメッセージそのものです。
メッセージが関数呼び出しであることを示します。
未使用。
呼び出す関数のオブジェクトIDを指定します。
関数に渡される引数の数を指定します。
それぞれの引数に対して以下のものがあります。
このサイズを除いた引数の値のサイズの指定。
バイナリ形式でのフィールドそのものの値を指定します。 nは上記のサイズです。
メッセージが関数呼び出しの結果であることを示します。
空でない結果が返されたことを指定します。
このサイズを除いた結果の値のサイズを指定します。
バイナリ形式で結果の値そのものを指定します。 nは上記のサイズです。
未使用(厳密には、FunctionResultResponse と FunctionVoidResponse は同一のものですが、メッセージに対していくつかの選択部分があります)。
メッセージが関数呼び出しの結果であることを示します。
空の結果が返されたことを指定します。
メッセージが通知であることを識別します。
通知メッセージそのものです。
メッセージが通知に関する応答であることを識別します。
通知を行ったバックエンドプロセスのプロセスID。
通知が発生した条件の名称です。
バイト数によるパケットのサイズです。
(必要に応じて暗号化)パスワードです。
メッセージが問い合わせであることを示します。
問い合わせ文字列そのもの。
メッセージの型を示します。バックエンドが新規の問い合わせサイクルに入る時にReadyForQueryが送られます。
メッセージが行の解説であることを識別します。
行のフィールド数(0の場合もある)を指定します。
それぞれのフィールドに対し以下のものがあります。
フィールド名を指定します。
フィールドの型のオブジェクトIDを指定します。
型のサイズを指定します。
型の修飾子を指定します。
バイト数によるパケットのサイズです。
SSL要求コード。 最上位16ビットに 1234 、最下位16ビットに5679 を含むような値が選ばれます(混乱を避けるため、このコードは他のプロトコルバージョンとは同一でありません)。
バイト数によるパケットのサイズです。
プロトコルのバージョン番号。最上位16ビットはメジャーバージョン番号です。最下位16ビットはマイナーバージョン番号を表します。
データベース名。 空の場合はユーザ名がデフォルトになります
ユーザ名
サーバによりバックエンド子プロセスに渡される、任意の追加のコマンドライン引数。
未使用。
バックエンドがメッセージのデバッグに使用する任意のttyです(現在、このフィールドはサポートされておらず、無視されます)。
メッセージが終了であることを識別します。