他のバージョンの文書 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

4.4. メッセージの形式

ここではそれぞれのメッセージの形式について記載します。それぞれはフロントエンド(F)、postmaster とバックエンド (B) あるいは双方(F & B)から送出されます。

AsciiRow (B)

Byte1('D')

メッセージが ASCIIデータ行であることを示します(先行するRowDescriptionメッセージで行の中のフィールド数とそのデータ型を定義します)。

Byten

行の各フィールドに1ビットずつ対応するビットマップです。第1 フィールドは第1バイトのビット7(MSB)に対応し、第2フィールドは第1バイトのビット6、第8フィールドは第1バイトのビット0(LSB)、第9フィールドは第2バイトのビット7といった順で対応します。対応するフィールドの値がNULLでない限りそれぞれのビットが立てられます。もしフィールド数が8の倍数でない場合には、ビットマップにおける最後のバイトの余りは不要となります。

値がNULLでないそれぞれのフィールドに対して以下があります。

Int32

このサイズを含めたフィールドの値の大きさを指定します。

Byten

ASCII文字でのフィールドの値そのものの指定です。 nは上記のサイズから4を引いたものです。 フィールドデータの最後にはゼロのバイトが付いていません。 必要ならフロントエンドが付加しなければいけません。

AuthenticationOk (B)

Byte1('R')

メッセージが認証要求であることを示します。

Int32(0)

認証が成功したことを示します。

AuthenticationKerberosV4 (B)

Byte1('R')

メッセージが認証要求であることを示します。

Int32(1)

Kerberos V4の認証が必要なことを指定します。

AuthenticationKerberosV5 (B)

Byte1('R')

メッセージが認証要求であることを示します。

Int32(2)

Kerberos V5の認証が必要なことを指定します。

AuthenticationCleartextPassword (B)

Byte1('R')

メッセージが認証要求であることを示します。

Int32(3)

平文パスワードが必要であることを指定します。

AuthenticationCryptPassword (B)

Byte1('R')

メッセージが認証要求であることを示します。

Int32(4)

crypt() による暗号化パスワードが必要であることを指定します。

Byte2

パスワードを暗号化するときに使用するソルトです。

AuthenticationMD5Password (B)

Byte1('R')

メッセージが認証要求であることを示します。

Int32(5)

MD5 暗号化パスワードが必要であることを指定します。

Byte4

パスワードを暗号化するときに使用するソルトです。

AuthenticationSCMCredential (B)

Byte1('R')

メッセージが認証要求であることを示します。

Int32(6)

SCM 資格証明メッセージが必要であることを指定します。

BackendKeyData (B)

Byte1('K')

メッセージが取り消しの鍵データであることを示します。フロントエンドは後でCancelRequestメッセージを出すのであればこれらの値を保存しておかなければなりません。

Int32

このバックエンドのプロセスIDです。

Int32

このバックエンドの秘密キーです。

BinaryRow (B)

Byte1('B')

メッセージがバイナリデータ行であることを示します(先行する RowDescription メッセージで行の中のフィールド数とそのデータ型を定義します)。

Byten

行の各フィールドに1ビットずつ対応するビットマップです。第1 フィールドは第1バイトのビット7(MSB)に対応し、第2フィールドは第1バイトのビット6、第8フィールドは第1バイトのビット0(LSB)、第9フィールドは第2バイトのビット7といった順で対応します。対応するフィールドの値がNULLでない限りそれぞれのビットが立てられます。もしフィールド数が8の倍数でない場合には、ビットマップにおける最後のバイトの余りは不要となります。

値がNULLでないそれぞれのフィールドに対して以下があります。

Int32

このサイズを含めないフィールドの値の大きさを指定します。

Byten

バイナリ形式でのフィールドそのものの値を指定します。 nは上記のサイズです。

CancelRequest (F)

Int32(16)

バイト数によるパケットのサイズです。

Int32(80877102)

取り消し要求のコード。 最上位16ビットに 1234 、最下位16ビットに5678 を含むような値が選ばれます(混乱を避けるため、このコードは他のプロトコルバージョンとは同一でありません)。

Int32

目的とするバックエンドのプロセスIDです。

Int32

目的とするバックエンドの秘密キーです。

CompletedResponse (B)

Byte1('C')

メッセージが完了した回答であることを示します。

String

コマンドタグ。 これは通常どのSQL命令が完了したかを示す1単語です。

INSERT コマンドの場合、このタグは INSERT oid rows です。 ただし、rows は挿入された行の数を示します。 また、oid は、rows が 1 の場合、挿入された行のオブジェクト ID を示します。 さもなくば、oid は 0 となります。

DELETE コマンドの場合、このタグは DELETE rows です。 ただし、rows は削除された行の数です。

UPDATE コマンドの場合、このタグは UPDATE rows です。 ただし、rows は更新された行の数です。

CopyDataRows (B & F)

連続する行データで、各行はByte1('\n')で終わります。すべてのデータの一番最後にはByte1('\\')、Byte1('.')、Byte1('\n')という文字の並びが付きます。

CopyInResponse (B)

Byte1('G')

メッセージが「コピーインの開始」であることを示します。 フロントエンドはここで、CopyDataRowsメッセージを送信しなければなりません。

CopyOutResponse (B)

Byte1('H')

メッセージが「コピーアウトの開始」であることを示します。 このコマンドには、さらにCopyDataRowsメッセージが続きます。

CursorResponse (B)

Byte1('P')

メッセージがカーソル回答であることを識別します。

String

カーソルの名称。カーソル名を明示的に指定しなかった場合、これは "blank"という文字列になります。

EmptyQueryResponse (B)

Byte1('I')

メッセージが空の問い合わせ文字列の回答であることを示します。

String("")

未使用。

ErrorResponse (B)

Byte1('E')

メッセージがエラーメッセージであることを識別します。

String

エラーメッセージそのものです。

FunctionCall (F)

Byte1('F')

メッセージが関数呼び出しであることを示します。

String("")

未使用。

Int32

呼び出す関数のオブジェクトIDを指定します。

Int32

関数に渡される引数の数を指定します。

それぞれの引数に対して以下のものがあります。

Int32

このサイズを除いた引数の値のサイズの指定。

Byten

バイナリ形式でのフィールドそのものの値を指定します。 nは上記のサイズです。

FunctionResultResponse (B)

Byte1('V')

メッセージが関数呼び出しの結果であることを示します。

Byte1('G')

空でない結果が返されたことを指定します。

Int32

このサイズを除いた結果の値のサイズを指定します。

Byten

バイナリ形式で結果の値そのものを指定します。 nは上記のサイズです。

Byte1('0')

未使用(厳密には、FunctionResultResponse と FunctionVoidResponse は同一のものですが、メッセージに対していくつかの選択部分があります)。

FunctionVoidResponse (B)

Byte1('V')

メッセージが関数呼び出しの結果であることを示します。

Byte1('0')

空の結果が返されたことを指定します。

NoticeResponse (B)

Byte1('N')

メッセージが通知であることを識別します。

String

通知メッセージそのものです。

NotificationResponse (B)

Byte1('A')

メッセージが通知に関する応答であることを識別します。

Int32

通知を行ったバックエンドプロセスのプロセスID。

String

通知が発生した条件の名称です。

PasswordPacket (F)

Int32

バイト数によるパケットのサイズです。

String

(必要に応じて暗号化)パスワードです。

Query (F)

Byte1('Q')

メッセージが問い合わせであることを示します。

String

問い合わせ文字列そのもの。

ReadyForQuery (B)

Byte1('Z')

メッセージの型を示します。バックエンドが新規の問い合わせサイクルに入る時にReadyForQueryが送られます。

RowDescription (B)

Byte1('T')

メッセージが行の解説であることを識別します。

Int16

行のフィールド数(0の場合もある)を指定します。

それぞれのフィールドに対し以下のものがあります。

String

フィールド名を指定します。

Int32

フィールドの型のオブジェクトIDを指定します。

Int16

型のサイズを指定します。

Int32

型の修飾子を指定します。

SSLRequest (F)

Int32(8)

バイト数によるパケットのサイズです。

Int32(80877103)

SSL要求コード。 最上位16ビットに 1234 、最下位16ビットに5679 を含むような値が選ばれます(混乱を避けるため、このコードは他のプロトコルバージョンとは同一でありません)。

StartupPacket (F)

Int32(296)

バイト数によるパケットのサイズです。

Int32

プロトコルのバージョン番号。最上位16ビットはメジャーバージョン番号です。最下位16ビットはマイナーバージョン番号を表します。

LimString64

データベース名。 空の場合はユーザ名がデフォルトになります

LimString32

ユーザ名

LimString64

サーバによりバックエンド子プロセスに渡される、任意の追加のコマンドライン引数。

LimString64

未使用。

LimString64

バックエンドがメッセージのデバッグに使用する任意のttyです(現在、このフィールドはサポートされておらず、無視されます)。

Terminate (F)

Byte1('X')

メッセージが終了であることを識別します。