メッセージ形式

この章ではそれぞれのメッセージの形式について記載します。それぞれはフロントエンド(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

Unused.

LimString64

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

Terminate (F)

Byte1('X')

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

UnencryptedPasswordPacket (F)

Int32

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

String

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