メッセージの書式

PostgreSQL 9.1.1文書
前のページ | 巻戻し | 第 46章フロントエンド/バックエンドプロトコル | 早送り | 次のページ

# 46.5. メッセージの書式

本節ではそれぞれのメッセージの詳細書式について説明します。 それぞれにはフロントエンド（F）、バックエンド（B）あるいは双方（F & B）から送出されることを示す印が付いています。 各メッセージには先頭にバイト数を持っていますが、バイト数を参照しなくてもメッセージの終わりを検知できるようにメッセージ書式は定義されています。 これは有効性検査を補助します。 （CopyDataメッセージはデータストリームの一部を形成しますので例外です。 個々のCopyDataメッセージの内容は自身でも解釈することができません。）

AuthenticationOk (B)

  Byte1('R')

    認証要求としてメッセージを識別します。

  Int32(8)

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int32(0)

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

AuthenticationKerberosV5 (B)

  Byte1('R')

    メッセージを認証要求として識別します。

  Int32(8)

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int32(2)

    Kerberos V5認証が必要であることを指定します。

AuthenticationCleartextPassword (B)

  Byte1('R')

    メッセージを認証要求として識別します。

  Int32(8)

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int32(3)

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

AuthenticationMD5Password (B)

  Byte1('R')

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

  Int32(12)

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int32(5)

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

  Byte4

    パスワード暗号化用ソルトです。

AuthenticationSCMCredential (B)

  Byte1('R')

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

  Int32(8)

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int32(6)

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

AuthenticationGSS (B)

  Byte1('R')

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

  Int32(8)

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int32(7)

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

AuthenticationSSPI (B)

  Byte1('R')

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

  Int32(8)

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int32(9)

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

AuthenticationGSSContinue (B)

  Byte1('R')

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

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int32(8)

    このメッセージがGSSPAIまたはSSPIデータを含むことを指定します。

  Byte`n`

    GSSAPIまたはSSPI認証データです。

BackendKeyData (B)

  Byte1('K')

    メッセージが取消用キーデータであることを識別します。 もし、後でCancelRequestメッセージを発行する可能性があれば、フロントエンドはこの値を保存しなければなりません。

  Int32(12)

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int32

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

  Int32

    このバックエンドの秘密鍵。

Bind (F)

  Byte1('B')

    このメッセージがBindコマンドであることを識別します。

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  String

    宛先ポータルの名前です （空文字列で無名ポータルを選択します）。

  String

    元となるプリペアド文の名前です （空文字列で無名のプリペアド文を選択します）。

  Int16

    後続するパラメータ書式コードの数 （以下では`C`で表します）。 これは、パラメータが存在しない、あるいはすべてのパラメータがデフォルトの書式（テキスト）を使用することを示す0に、指定する書式コードをすべてのパラメータに適用することを示す1にすることができます。 さもなくば、これは実際のパラメータ数と同じになります。

  Int16[`C`]

    パラメータ書式コード。 現在、それぞれは0（テキスト）もしくは1（バイナリ）のいずれかでなければなりません。

  Int16

    後続するパラメータ値の数 （ゼロの場合もあります）。 これは問い合わせが必要とするパラメータ数と一致する必要があります。

  次に、各パラメータに対して、以下のフィールドのペアが現れます。

  Int32

    パラメータ値のバイト単位の長さ（これには自身は含まれません）。 ゼロにすることもできます。 特別な場合として、-1はNULLというパラメータ値を示します。 NULLの場合、後続の値用のバイトはありません。

  Byte`n`

    関連する書式コードで示される書式におけるパラメータの値。 `n`は上述の長さです。

  最後のパラメータの後に、以下のフィールドが現れます。

  Int16

    後続する結果列書式コードの数 （以下では`R`で表します）。 これは、結果列が存在しないことを示す0、あるいはすべての結果列が（もしあれば）デフォルトの書式コード（テキスト）を使用することを示す1にすることができます。 さもなくば、問い合わせの結果列の実際の数と同じになります。

  Int16[`R`]

    結果列の書式コード。 現在それぞれは0（テキスト）もしくは1（バイナリ）のいずれかでなければなりません。

BindComplete (B)

  Byte1('2')

    メッセージがBind完了指示子であることを識別します。

  Int32(4)

    自身を含む、メッセージ内容の長さ（バイト単位）。

CancelRequest (F)

  Int32(16)

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int32(80877102)

    取消要求コードです。 この値は、最上位16ビットに`1234`が、下位16ビットに`5678`を持つように選択されます。 （混乱を防ぐため、このコードはプロトコルバージョン番号と同一になってはいけません。）

  Int32

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

  Int32

    対象バックエンドの秘密鍵です。

Close (F)

  Byte1('C')

    メッセージがCloseコマンドであることを識別します。

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Byte1

    プリペアド文を閉ざす時は'`S`'。 ポータルを閉ざす時は'`P`'です。

  String

    閉ざすプリペアド文またはポータルの名前です （空文字列で無名のプリペアド文または無名ポータルを選択します）。

CloseComplete (B)

  Byte1('3')

    メッセージがClose完了指示子であることを識別します。

  Int32(4)

    自身を含む、メッセージ内容の長さ（バイト単位）。

CommandComplete (B)

  Byte1('C')

    メッセージがコマンド完了応答であることを識別します。

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  String

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

    `INSERT`コマンドの場合、タグは`INSERT `oid` `rows``です。 ここで`rows`は挿入された行数です。 `oid`は、`rows`が1、かつ、対象テーブルがOIDを持つ場合、挿入された行のオブジェクトIDです。 さもなければ、`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以降でのみ出力されます）。

CopyData (F & B)

  Byte1('d')

    メッセージがデータの`COPY`であることを識別します。

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Byte`n`

    `COPY`データストリームの一部を形成するデータです。 バックエンドから送信されるメッセージは、常に1つのデータ行に対応します。 しかし、フロントエンドから送信されるメッセージは任意のデータストリームに分割される可能性があります。

CopyDone (F & B)

  Byte1('c')

    メッセージが`COPY`完了指示子であることを識別します。

  Int32(4)

    自身を含む、メッセージ内容の長さ（バイト単位）。

CopyFail (F)

  Byte1('f')

    メッセージが`COPY`失敗指示子であることを識別します。

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  String

    失敗の原因を報告するエラーメッセージです。

CopyInResponse (B)

  Byte1('G')

    メッセージがStart Copy Inの応答であることを識別します。 フロントエンドはここで必ずコピーインデータを送信しなければなりません （まだ準備ができていない場合はCopyFailメッセージを送信してください）。

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int8

    0は`COPY`全体の書式がテキスト（行は改行で区切られ、列は区切り文字などで区切られます）であることを示します。 1は、コピー全体の書式がバイナリ（DataRowの書式と同様）であることを示します。 より詳細についてはCOPYを参照してください。

  Int16

    コピーされるデータ内の列数です （以下では`N`と表されます）。

  Int16[`N`]

    各列で使用される書式コードです。 現在それぞれは0（テキスト）または1（バイナリ）でなければなりません。 コピー全体の書式がテキストの場合、すべてが0でなければなりません。

CopyOutResponse (B)

  Byte1('H')

    メッセージがStart Copy Outの応答であることを識別します。 このメッセージの後にコピーアウトデータが続きます。

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int8

    0は`COPY`全体の書式がテキスト（行は改行で区切られ、列は区切り文字などで区切られます）であることを示します。 1はコピー全体の書式がバイナリ（DataRowの書式同様）であることを示します。 詳細についてはCOPYを参照してください。

  Int16

    コピーされるデータ内の列数です （以下では`N`と表されます）。

  Int16[`N`]

    各列で使用される書式コードです。 現在それぞれは0（テキスト）または1（バイナリ）でなければなりません。 コピー全体の書式がテキストの場合、すべてが0でなければなりません。

CopyBothResponse (B)

  Byte1('W')

    メッセージがStart Copy Bothの応答であることを識別します。 このメッセージはストリーミングレプリケーションのみで使用されます。

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int8

    0は`COPY`全体の書式がテキスト（行は改行で区切られ、列は区切り文字などで区切られます）であることを示します。 1はコピー全体の書式がバイナリ（DataRowの書式同様）であることを示します。 詳細についてはCOPYを参照してください。

  Int16

    コピーされるデータ内の列数です （以下では`N`と表されます）。

  Int16[`N`]

    各列で使用される書式コードです。 現在それぞれは0（テキスト）または1（バイナリ）でなければなりません。 コピー全体の書式がテキストの場合、すべてが0でなければなりません。

DataRow (B)

  Byte1('D')

    メッセージがデータ行であることを識別します。

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int16

    後に続く列値の数です （ゼロの場合もあります）。

  次に、各列について以下のフィールドのペアが現れます。

  Int32

    列値のバイト単位の長さです （これには自身は含まれません）。 ゼロとすることもできます。 特別な場合として、-1はNULLという列値を示します。 NULLの場合、後続の値用のバイトはありません。

  Byte`n`

    関連する書式コードで示される書式における列の値。 `n`は上述の長さです。

Describe (F)

  Byte1('D')

    メッセージがDescribeコマンドであることを識別します。

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Byte1

    プリペアド文の記述の場合は'`S`'。 ポータルの記述の場合は'`P`'です。

  String

    記述を求めるプリペアド文またはポータルの名前です （空文字列で無名のプリペアド文または無名ポータルを選択します）。

EmptyQueryResponse (B)

  Byte1('I')

    メッセージが空の問い合わせ文字列に対する応答であることを識別します （これはCommandCompleteを置き換えます）。

  Int32(4)

    自身を含む、メッセージ内容の長さ（バイト単位）。

ErrorResponse (B)

  Byte1('E')

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

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  このメッセージの本体には、ゼロバイトを終端として後続する、1つ以上の識別されるフィールドが含まれます。 フィールドは任意の順番で現れる可能性があります。 各フィールドには以下があります。

  Byte1

    フィールド種類を識別するコードです。 ゼロならば、メッセージの終端であり、後続する文字列がないことを表します。 項46.6に、現時点でフィールド種類として定義されているものを列挙します。 将来もっと多くのフィールド種類が追加される可能性がありますので、フロントエンドは、認知できない種類のフィールドに対して何もせずに無視すべきです。

  String

    フィールド値です。

Execute (F)

  Byte1('E')

    メッセージがExecuteコマンドであることを識別します。

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  String

    実行するポータルの名前です。 （空文字列で無名ポータルを選択します）。

  Int32

    ポータルが行を返す問い合わせの場合、返される行数の最大値です （他の問い合わせでは無視されます）。 ゼロは"無制限"を表します。

Flush (F)

  Byte1('H')

    メッセージがFlushコマンドであることを識別します。

  Int32(4)

    自身を含む、メッセージ内容の長さ（バイト単位）。

FunctionCall (F)

  Byte1('F')

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

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int32

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

  Int16

    後述する引数書式コード数です （以下では`C`と表します）。 これは、引数が存在しない、あるいは、すべての引数がデフォルトの書式（テキスト）を使用することを示す0に、指定する書式コードをすべての引数に適用することを示す1にすることができます。 さもなくば、これは実際の引数の数と同じになります。

  Int16[`C`]

    引数の書式コードです。 それぞれは、0（テキスト）もしくは1（バイナリ）でなければなりません。

  Int16

    関数に提供する引数の数を指定します。

  次に、各引数に対して以下のフィールドのペアが現れます。

  Int32

    引数の値のバイト単位の長さです （これには自身は含まれません）。 0とすることもできます。 特別な場合として、-1はNULLという引数の値を示します。 NULLの場合、後続の値用のバイトはありません。

  Byte`n`

    関連する書式コードで示される書式における引数の値。 `n`は上述の長さです。

  最後の引数の後に、以下のフィールドが現れます。

  Int16

    関数結果用の書式コードです。 現在、0（テキスト）または1（バイナリ）でなければなりません。

FunctionCallResponse (B)

  Byte1('V')

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

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int32

    関数の結果の値のバイト単位の長さです （これには自身は含まれません）。 ゼロとすることもできます。 特別な場合として、-1はNULLという関数の結果の値を示します。 NULLの場合、後続の値用のバイトはありません。

  Byte`n`

    関連する書式コードで示される書式における関数の結果の値。 `n`は上述の長さです。

NoData (B)

  Byte1('n')

    メッセージがデータなしの指示子であることを識別します。

  Int32(4)

    自身を含む、メッセージ内容の長さ（バイト単位）。

NoticeResponse (B)

  Byte1('N')

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

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  このメッセージの本体には、ゼロバイトを終端として後続する、1つ以上の識別されるフィールドが含まれます。 フィールドは任意の順番で現れる可能性があります。 各フィールドには以下があります。

  Byte1

    フィールド種類を識別するコードです。 ゼロならば、メッセージの終端であり、後続する文字列がないことを表します。 項46.6に、現時点でフィールド種類として定義されているものを列挙します。 将来もっと多くのフィールド種類が追加される可能性がありますので、フロントエンドは、認知できない種類のフィールドに対して何もせずに無視すべきです。

  String

    フィールドの値です。

NotificationResponse (B)

  Byte1('A')

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

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int32

    通知元バックエンドのプロセスIDです。

  String

    通知の発生元となったチャネル名です。

  String

    通知プロセスから渡される"ペイロード"文字列です。

ParameterDescription (B)

  Byte1('t')

    メッセージがパラメータ記述であることを識別します。

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int16

    文で使用されるパラメータ数です （ゼロとすることができます）。

  そして、各パラメータに対して、以下が続きます。

  Int32

    パラメータのデータ型のオブジェクトIDを指定します。

ParameterStatus (B)

  Byte1('S')

    メッセージが実行時パラメータ状態報告であることを識別します。

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  String

    報告される実行時パラメータの名前です。

  String

    そのパラメータの現在値です。

Parse (F)

  Byte1('P')

    メッセージがParseコマンドであることを識別します。

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  String

    宛先のプリペアド文の名前です （空文字列で無名のプリペアド文を選択します）。

  String

    解析される問い合わせ文字列です。

  Int16

    指定されるパラメータデータ型の数です （ゼロとすることができます）。 これは、問い合わせ文字列内にあるパラメータの数を示すものではないことに注意してください。 フロントエンドが型指定を希望するパラメータの数でしかありません。

  その後、各パラメータに対し、以下が続きます。

  Int32

    パラメータのデータ型のオブジェクトIDを指定します。 ここにゼロを書くことは型指定を行わないことと同じです。

ParseComplete (B)

  Byte1('1')

    メッセージがParse完了指示子であることを識別します。

  Int32(4)

    自身を含む、メッセージ内容の長さ（バイト単位）。

PasswordMessage (F)

  Byte1('p')

    メッセージがパスワード応答であることを識別します。 これがGSSAPIまたはSSPI応答メッセージでも使用されることに注意してください。 （これは本当は設計エラーです。こうした場合含まれるデータはヌル終端の文字列ではなく、任意のバイナリデータを取り得るためです。）

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  String

    パスワードです （必要ならば暗号化されています）。

PortalSuspended (B)

  Byte1('s')

    メッセージがポータル中断指示子であることを識別します。 これは、Executeメッセージの行数制限に達した場合にのみ現れることに注意してください。

  Int32(4)

    自身を含む、メッセージ内容の長さ（バイト単位）。

Query (F)

  Byte1('Q')

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

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  String

    問い合わせ文字列自体です。

ReadyForQuery (B)

  Byte1('Z')

    このメッセージ種類を識別します。 バックエンドで新しい問い合わせサイクルの準備が整った時には常にReadyForQueryが送信されます。

  Int32(5)

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Byte1

    現在のバックエンドのトランザクション状態指示子です。 取り得る値は、待機状態（トランザクションブロックにない状態）に'`I`'、トランザクションブロック内の場合に'`T`'、失敗したトランザクションブロック（ブロックが終わるまで問い合わせは拒絶されます）内の場合に'`E`'です。

RowDescription (B)

  Byte1('T')

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

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int16

    行内のフィールド数を指定します （ゼロとすることができます）。

  その後、各フィールドに対して以下が続きます。

  String

    フィールド名です。

  Int32

    フィールドが特定のテーブルの列として識別できる場合、テーブルのオブジェクトIDです。 さもなくばゼロです。

  Int16

    フィールドが特定のテーブルの列として識別できる場合、列の属性番号です。 さもなくばゼロです。

  Int32

    フィールドのデータ型のオブジェクトIDです。

  Int16

    データ型の大きさ（`pg_type.typlen`を参照）です。 負の値が可変長の型を表すことに注意してください。

  Int32

    型修飾子（`pg_attribute.atttypmod`を参照）です。 修飾子の意味は型に固有です。

  Int16

    フィールドに使用される書式コードです。 現在、0（テキスト）または1（バイナリ）のいずれかになります。 RowDescriptionがステートメント用のDescribeから返された場合、書式コードはまだ不明ですので、常に0になります。

SSLRequest (F)

  Int32(8)

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int32(80877103)

    SSL要求コードです。 この値は、最上位16ビットに`1234`が、下位16ビットに`5679`を持つように選択されます （混乱を防ぐため、このコードはプロトコルバージョン番号と同一になってはいけません）。

StartupMessage (F)

  Int32

    自身を含む、メッセージ内容の長さ（バイト単位）。

  Int32(196608)

    プロトコルバージョン番号です。 最上位16ビットは主バージョン番号（本章で説明したプロトコルでは3）です。 下位16ビットは副バージョン番号（本章で説明したプロトコルでは0）です。

  プロトコルバージョン番号の後に、1つ以上のパラメータ名と値文字列のペアが続きます。 最後の名前と値のペアの後に終端としてゼロバイトが必要です。 パラメータは任意の順番で現れることができます。 `user`は必須です。 他は省略可能です。 各パラメータは以下のように指定されます。

  String

    パラメータ名です。 現在認識される名前を以下に示します。

    `user`

      接続するデータベースユーザ名です。 必須。 デフォルトはありません。

    `database`

      接続するデータベースです。 デフォルトはユーザ名です。

    `options`

      バックエンド用のコマンドライン引数です （これは個々の実行時パラメータ設定のため、廃棄予定です）。

    上記に加え、バックエンドの起動時に設定可能な、任意の実行時パラメータが列挙される可能性があります。 こうした設定は、バックエンド起動時に（もしあればコマンドラインオプションの解析の後に）適用されます。 この値はセッションのデフォルトとして動作します。

  String

    パラメータの値です。

Sync (F)

  Byte1('S')

    メッセージがSyncコマンドであることを識別します。

  Int32(4)

    自身を含む、メッセージ内容の長さ（バイト単位）。

Terminate (F)

  Byte1('X')

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

  Int32(4)

    自身を含む、メッセージ内容の長さ（バイト単位）。

前のページ | ホーム | 次のページ
メッセージのデータ型 | 上に戻る | エラーおよび警報メッセージフィールド