42.2. 聯接是如何建立起來的

PostgreSQL 是用一個簡單的"每用戶一進程" 的client/server 模型實現的。 在這種模式裡一個客戶端進程只是與一個服務器進程聯接。 因為我們不知道具體要建立多少個聯接, 所以我們不得不利用一個主進程在每次聯接請求時派生出一個新的服務器進程來。 這個主進程叫做 postmaster, 它監聽著一個特定的 TCP/IP 端口等待進來的聯接。 每當檢測到一個聯接請求時,postmaster 進程派生出一個新的叫 postgres的服務器進程。 服務器任務(postgres 進程)相互之間使用信號燈共享內存進行通訊, 以確保在並行的數據訪問過程中的數據完整性。

客戶端進程可以是任何理解 PostgreSQL 協議(在 Chapter 44 裡描述)的程序。 許多客戶端都是基于 C 語言庫 libpq,但是也存在幾個獨立的實現,比如 Java JDBC 驅動。

一旦建立起來聯接, 客戶端進程就可以向後端(服務器)進程發送查詢了。 查詢是通過純文本傳輸的,也就是說在 前端(客戶端)不做任何分析處理。 服務器分析查詢,創建執行規劃, 執行該規劃並且通過已經建立起來的連接把檢索出來的數據行返回給客戶端。