Chapter 4. フロントエンド/バックエンドプロトコル

Table of Contents
4.1. 概要
4.2. プロトコル
4.2.1. 開始
4.2.2. 問い合わせ
4.2.3. 関数呼び出し
4.2.4. 通知への応答
4.2.5. 処理中のリクエストの取り消し
4.2.6. 終了
4.2.7. SSL セッション暗号化
4.3. メッセージのデータ型
4.4. メッセージの形式

Note: Phil Thompson()によって作成されました。 Tom Lane()によりプロトコルバージョン2.0用に更新されました。

PostgreSQLはフロントエンドとバックエンドの通信にメッセージベースのプロトコルを使用します。このプロトコルはTCP/IPやUnixソケットを介して実装されます。PostgreSQL 6.3はこのプロトコルに対しバージョン番号を導入しました。 これは旧バージョンのフロントエンドに対しても接続を可能にするためですが、このドキュメントでは以前のバージョンで使用されたプロトコルについては解説しません。

この文書はPostgreSQL 6.4以降に実装されたプロトコル2.0バージョンについて記載します。

本プロトコル上に構築されたより高度の機能(たとえば、接続開始後どのようにlibpq がある特定の環境変数を渡すか)については、他の文書で説明します。

4.1. 概要

フロントエンドはサーバへの接続を開き、開始パケットを送信します。ここには、ユーザ名、接続対象のデータベース名が含まれます。そして、サーバはこの情報と、pg_hba.conf の情報を使用して、フロントエンドが送信しなければならない認証情報を(もしあれば)決定し、それに従って、フロントエンドに回答します。

フロントエンドは、その後、必要とされる認証情報を送信します。サーバはこの情報を有効と認めた後、フロントエンドに対し承認された旨を応答し、そして、(正常な場合)開始フェーズが成功したことを示すメッセージ、または(例えば無効なデータベース名といった)失敗したことを示すメッセージを送信します。

効率的に複数のクライアントを扱うために、サーバは各クライアント用に新しい"バックエンド"プロセスを起動します。しかし、これはプロトコル上は意識されません。現在の実装では、新規の子プロセスは入力方向の接続が検出された直後に生成されます。

フロントエンドが接続を解除するとき、特定のパケットを送出し、バックエンドの応答を待つことなく接続を解除します。

パケットは一連のデータの流れとして送出されます。第1バイトは、それ以降のパケットが何を要求しているかを規定します。 例外は、開始および認証交換の一部で送信されるパケットで、パケット長と、パケットのデータそのものから成ります。この違いは歴史的な事情によるものです。