★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 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

2.2. 接続の確立

PostgreSQL は単純な「1 プロセスに 1 ユーザー」のクライアント/サーバモデルによって実装されています。このモデルでは 1 つのサーバプロセスに対して正確に 1 つのクライアントプロセスしかありません。いくつの接続が行われるか本質的にわからないため、接続要求のたびに新しいプロセスを作るマスタープロセスを使わなければいけません。このマスタープロセスは postmaster と呼ばれ、入ってくる接続要求にたいし指定された TCP/IP ポートを監視します。接続要求を検出すると、postmaster プロセスは postgres と呼ばれる新しいサーバープロセスを産み出します。それぞれのサーバのタスク(postgres プロセス)はセマフォ共有メモリを使って、同時にデータにアクセスしても整合性が保たれるようにお互いと連絡をとりあいます。図 \ref{connection} はマスタープロセスの postmaster、サーバプロセスの postgres、そしてクライアントアプリケーション、それぞれの 3 つの相互連関を表しています。

クライアントプロセスは、psql フロントエンド(対話型 SQL 問い合わせ用)、または libpg ライブラリを使って実装されたユーザーアプリケーションのいずれかです。ecpgPostgreSQL の C 言語用の埋め込み SQL プリプロセッサ)を使って実装されたアプリケーションもこのライブラリを使います。

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