目次
PostgreSQLはフロントエンドとバックエンド(クライアントとサーバ)の通信にメッセージベースのプロトコルを使用します。 このプロトコルはTCP/IPに加え、Unixドメインソケットをサポートします。 ポート番号5432は、このプロトコルをサポートするサーバ用のTCPポートとしてIANAに登録されています。 しかし、実際には任意の非特権ポート番号を使用することができます。
この文書はPostgreSQL 7.4以降で実装されたプロトコル3.0バージョンについて記載します。 以前のプロトコルバージョンについての説明は、PostgreSQLの以前のリリースの文書を参照してください。 単一のサーバが複数のプロトコルバージョンをサポートできます。 初めの開始要求メッセージは、サーバに対し、クライアントが使用する予定のプロトコルバージョンを通知します。 クライアントが要求したメジャーバージョンをサーバがサポートしない場合は、接続は拒否されます。(これはたとえば、クライアントが本稿執筆時点で存在しないプロトコルバージョン4.0を要求した際に起るでしょう。) クライアントが要求したマイナーバージョンをサーバがサポートしない場合は(たとえばクライアントがバージョン3.1を要求し、サーバが3.0しかサポートしていないようなときです)、サーバは接続を拒否しても良いですし、サポートする最も大きなマイナープロトコルバージョンを含むNegotiateProtocolVersionメッセージを返しても構いません。 クライアントは、指定されたプロトコルバージョンで接続を継続するか、あるいは接続を切断するかのどちらかを選択できます。
複数のクライアントにサービスを効率的に提供するために、サーバは各クライアント毎に新規の「バックエンド」プロセスを起動します。 現在の実装では、サーバに接続が届いたことを検知すると即座に新しい子プロセスが生成されます。 しかし、これはプロトコルに対して透過的です。 プロトコルという意味では、「バックエンド」と「サーバ」という用語は相互交換可能です。 同様に「フロントエンド」と「クライアント」も相互交換可能です。