52.2. 連線是如何被建立的

連線是如何被建立的

PostgreSQL採用了一種“每個使用者一個程序”的客戶端/伺服器模型。在這種模型中,每個客戶端程序(client process)只連接到一個後端程序(backend process)。由於我們事先不知道會有多少連線,所以我們必須使用一個「監督程序」,每次收到連線請求時,它就產生一個新的後端程序。這個監督程序叫做postmaster,它在指定的 TCP/IP 連線埠上監聽傳入的連線。每當它檢測到一個連線請求,它就產生一個新的後端程序。這些後端程序之間以及與實例(instance)的其他程序使用 semaphores 和共享記憶體來溝通,以確保在同時間進行資料存取中的資料完整性

客戶端程序可以是任何理解 PostgreSQL 協定的程式,該協定說明在第 55 章中。許多客戶端是基於 C 語言函式庫 libpq,但也有一些是獨立實作該協定的程式,例如 Java 的 JDBC 驅動程式。

只要連線建立之後,該客戶端就能夠送查詢到對應的後端程序。查詢會以明文的方式傳送過去,客戶端不需要做解析的操作。而對應的後端程序會解析該查詢並建立一個執行計畫(execution plan),接著執行該計畫並透過對應的連線回傳查詢到的每筆(row)資料。