他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

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

目次

52.1. 概要
52.1.1. メッセージ処理の概要
52.1.2. 拡張問い合わせの概要
52.1.3. 書式と書式コード
52.2. メッセージの流れ
52.2.1. 開始
52.2.2. 簡易問い合わせ
52.2.3. 拡張問い合わせ
52.2.4. 関数呼び出し
52.2.5. COPY操作
52.2.6. 非同期操作
52.2.7. 処理中のリクエストの取り消し
52.2.8. 終了
52.2.9. SSLセッション暗号化
52.3. SASL認証
52.3.1. SCRAM-SHA-256 認証
52.4. ストリーミングレプリケーションプロトコル
52.5. 論理ストリーミングレプリケーションのプロトコル
52.5.1. 論理ストリーミングレプリケーションのパラメータ
52.5.2. 論理レプリケーションのプロトコルのメッセージ
52.5.3. 論理レプリケーションのプロトコルのメッセージフロー
52.6. メッセージのデータ型
52.7. メッセージの書式
52.8. エラーおよび警報メッセージフィールド
52.9. 論理レプリケーションのメッセージ書式
52.10. プロトコル2.0からの変更点の要約

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

この文書はPostgreSQL 7.4以降で実装されたプロトコル3.0バージョンについて記載します。 以前のプロトコルバージョンについての説明は、PostgreSQLの以前のリリースの文書を参照してください。 単一のサーバが複数のプロトコルバージョンをサポートできます。 初めの開始要求メッセージは、サーバに対し、クライアントが使用する予定のプロトコルバージョンを通知します。 クライアントが要求したメジャーバージョンをサーバがサポートしない場合は、接続は拒否されます。(これはたとえば、クライアントが本稿執筆時点で存在しないプロトコルバージョン4.0を要求した際に起るでしょう。) クライアントが要求したマイナーバージョンをサーバがサポートしない場合は(たとえばクライアントがバージョン3.1を要求し、サーバが3.0しかサポートしていないようなときです)、サーバは接続を拒否しても良いですし、サポートする最も大きなマイナープロトコルバージョンを含むNegotiateProtocolVersionメッセージを返しても構いません。 クライアントは、指定されたプロトコルバージョンで接続を継続するか、あるいは接続を切断するかのどちらかを選択できます。

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