Chapter 4. 前/後端協定

Table of Contents
4.1. 概述
4.2. 協定
4.2.1. 啟動
4.2.2. 查詢
4.2.3. 函數調用
4.2.4. 通知響應
4.2.5. 取消正在處理的請求
4.2.6. 終止
4.2.7. SSL 會話加密
4.3. 訊息資料類型
4.4. 訊息格式

注意: 由 Phil Thompson()寫作. 協定 2.0 的更新由 Tom Lane() 寫作.

Postgres 使用一種基於訊息的協定用於前端和後端之間通訊. 該協定是在 TCP/IP 和 Unix 域通訊端上實現的. Postgres v6.3 往協定裡面引入了版本號. 這麼做的同時仍然允許早期的前端與新的後端進行連結, 但是本文件沒有介紹那些早期版本的協定.

這份文件描述了版本 2.0 的協定,在 Postgres v6.4 和以後的版本中實現.

在這個協定的基礎上建立的更進階特性(例如,libpq 是如何在建立連結以後傳遞某種環境變數的)在其他地方描述.

4.1. 概述

前端打開一個與伺服器的連結然後發送一個啟動包. 包裡面包括使用者名和該使用者希望連結的資料庫名. 伺服器則使用這些資訊和 pg_hba.conf 文件裡的資訊決定她還需要前端發送什麼樣的進一步認証資訊 (如果需要的話)並且把這些回應給相應的前端.

該前端則發送任何所要求的認証資訊. 一旦 postmaster 認為有效,那麼它回應給前端並且把連結轉交給一個後端. 該後端則發送資訊給前端表明啟動成功(正常狀態)或失敗 (例如,非法資料庫名).

為了給多個客戶端提供有效的服務,伺服器通常會為客戶端 啟動一個新的"後端"程序.不過,這些事情對協定是透明的. 在目前的實現裡,新的幾程序常是在偵測到一個到來的連結之後立即建立的.

目前端希望中斷連結時, 它給後端發送一個合適的包並且在不等待後端回應的情況下關閉連結.

包是當做資料流發送的.包的第一個字節決定了包的其餘部分的類型. 例外是那些作為啟動和認証交換一部分的包,它們是由 包長和包本身組成.這種區別是歷史原因造成的.