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です。 フィールドデータの最後には '\0' が付いていません。必要なら フロントエンドが付加 しなければなりません。

AuthenticationOk (B)

Byte1('R')

メッセージが認証リクエストであることを識別します。

Int32(0)

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

AuthenticationKerberosV4 (B)

Byte1('R')

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

Int32(1)

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

AuthenticationKerberosV5 (B)

Byte1('R')

メッセージが認証リクエストであること示します。

Int32(2)

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

AuthenticationUnencryptedPassword (B)

Byte1('R')

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

Int32(3)

暗号化されていないパスワードが必要なことを指定します。

AuthenticationEncryptedPassword (B)

Byte1('R')

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

Int32(4)

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

Byte2

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

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単語です。

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("")

未使用。

EncryptedPasswordPacket (F)

Int32

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

String

(crypt() を使用した)暗号化されたパスワード。

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

通知が出された状況の名称。

Query (F)

Byte1('Q')

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

String

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

ReadyForQuery (B)

Byte1('Z')

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

RowDescription (B)

Byte1('T')

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

Int16

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

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

String

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

Int32

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

Int16

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

Int32

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

StartupPacket (F)

Int32(296)

バイトでのパケットのサイズ。

Int32

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

LimString64

データベースの名前で、空であればユーザ名がデフォルトになります。

LimString32

ユーザ名。

LimString64

postmaster からバックエンドに渡される任意の追加のコマンド ライン引数。

LimString64

未使用。

LimString64

バックエンドがメッセージのバグ取りに使用すべき任意の tty。

Terminate (F)

Byte1('X')

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

UnencryptedPasswordPacket (F)

Int32

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

String

暗号化されていないパスワード。