43.2. 接続の確立

PostgreSQLは単純な「1プロセスに1ユーザ」のクライアント/サーバモデルによって実装されています。 このモデルでは1つのサーバプロセスに対し厳密に1つのクライアントプロセスしか存在しません。 いくつの接続が行われるか事前にわからないので、接続要求の度に新しいプロセスを作るマスタープロセスを使わなければなりません。 このマスタープロセスはpostgresと呼ばれ、指定されたTCP/IPポートで入ってくる接続要求を監視します。 接続要求を検出すると、postgresプロセスは新しいサーバプロセスを生み出します。 このサーバのタスクはセマフォ共有メモリを活用して、同時にデータにアクセスしても整合性が保たれるようにお互いと連絡を取り合うことです。

クライアントプロセスは第45章に記載されたPostgreSQLプロトコルを理解できるどんなプログラムでも構いません。 多くのクライアントはlibpq C言語ライブラリに基づいていますが、Java JDBCドライバのようにいくつかの独立したプロトコル実装も存在します。

いったん接続が確立されると、クライアントプロセスはバックエンド(サーバ)に問い合わせを送ることができます。 問い合わせは平文で送信されます。 つまり、フロントエンド(クライアント)は構文解析を行いません。 サーバは問い合わせの構文解析を行い、実行計画を作り、そして計画を実行し、抽出した行を確立された接続を通じてクライアントに返します。