第 44章フロントエンド/バックエンドプロトコル

目次
44.1. 概要
44.1.1. メッセージ処理の概要
44.1.2. 拡張問い合わせの概要
44.1.3. 書式と書式コード
44.2. メッセージの流れ
44.2.1. 開始
44.2.2. 簡易問い合わせ
44.2.3. 拡張問い合わせ
44.2.4. 関数呼び出し
44.2.5. COPY操作
44.2.6. 非同期操作
44.2.7. 処理中のリクエストの取り消し
44.2.8. 終了
44.2.9. SSLセッション暗号化
44.3. メッセージのデータ型
44.4. メッセージの書式
44.5. エラーおよび警報メッセージフィールド
44.6. プロトコル2.0からの変更点の要約

PostgreSQLはフロントエンドとバックエンド(クライアントとサーバ)の通信にメッセージベースのプロトコルを使用します。 このプロトコルはTCP/IPやUnixソケットをサポートします。 ポート番号5432は、このプロトコルをサポートするサーバ用のTCPポートとしてIANAで登録されました。 しかし、実際には任意の非特権ポート番号を使用することができます。

この文書はPostgreSQL 7.4以降に実装されたプロトコル3.0バージョンについて記載します。 以前のプロトコルバージョンについての説明は、PostgreSQLの以前のリリースの文書を参照してください。 初めの開始要求メッセージは、サーバに対し、クライアントが使用する予定のプロトコルバージョンを通知します。 その後、サーバは可能であればそのプロトコルに従います。

本プロトコル上に構築されたより高度な機能(例えば、接続確立時にどのようにlibpqがある特定の環境変数を渡すか)については、別途説明します。

効率的に複数のクライアントにサービスを提供するために、サーバは各クライアント用に新規に"バックエンド"プロセスを起動します。 現在の実装では、サーバに接続が届いたことを検知すると即座に新しい子プロセスが生成されます。 しかし、これはプロトコルに対して透過です。 プロトコルという意味では、"バックエンド""サーバ"という用語は相互交換可能です。同様に"フロントエンド""クライアント"も相互交換可能です。