2025年9月25日: PostgreSQL 18 釋出!
支援的版本: 當前 (18) / 17 / 16 / 15 / 14 / 13
開發版本: devel
不支援的版本: 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

54.10. 自協議 2.0 以來的變更摘要 #

本節為開發者提供了一個快速的變更列表,以方便更新現有的客戶端庫到協議 3.0。

初始啟動包使用靈活的字串列表格式,而不是固定格式。請注意,執行時引數的會話預設值現在可以直接在啟動包中指定。(實際上,您之前可以使用 options 欄位做到這一點,但考慮到 options 的寬度有限,並且無法引用值中的空格,這並不是一個非常安全的技術。)

所有訊息在訊息型別位元組之後都有一個長度計數(除了啟動包,它們沒有型別位元組)。另請注意,PasswordMessage 現在有一個型別位元組。

ErrorResponse 和 NoticeResponse(‘E’ 和 ‘N’)訊息現在包含多個欄位,客戶端程式碼可以從這些欄位中組裝出所需詳細程度的錯誤訊息。請注意,單個欄位通常不會以換行符結尾,而舊協議中傳送的單個字串總是以換行符結尾。

ReadyForQuery(‘Z’)訊息包含一個事務狀態指示符。

BinaryRow 和 DataRow 訊息型別之間的區別已經消失;單一的 DataRow 訊息型別用於以所有格式返回資料。請注意,DataRow 的佈局已更改,使其更容易解析。此外,二進位制值的表示已更改:它不再直接與伺服器的內部表示相關聯。

有一個新的“擴充套件查詢”子協議,它增加了前端訊息型別 Parse、Bind、Execute、Describe、Close、Flush 和 Sync,以及後端訊息型別 ParseComplete、BindComplete、PortalSuspended、ParameterDescription、NoData 和 CloseComplete。現有客戶端不必關心此子協議,但使用它可能會帶來效能或功能的改進。

COPY 資料現在封裝在 CopyData 和 CopyDone 訊息中。在 COPY 過程中有一個明確的錯誤恢復方法。特殊的“\.”最後一行不再需要,並且在 COPY OUT 期間不傳送。(它仍然被識別為文字模式 COPY IN 的終止符,但在 CSV 模式下則不是。文字模式的行為已棄用,並可能最終被移除。)支援二進位制 COPY。CopyInResponse 和 CopyOutResponse 訊息包含指示列數和每列格式的欄位。

FunctionCall 和 FunctionCallResponse 訊息的佈局已更改。FunctionCall 現在支援向函式傳遞 NULL 引數。它還可以處理以文字或二進位制格式傳遞引數和檢索結果。由於它不再提供對內部伺服器資料表示的直接訪問,因此不再有理由將 FunctionCall 視為潛在的安全漏洞。

後端在連線啟動期間傳送 ParameterStatus(‘S’)訊息,用於所有它認為客戶端庫感興趣的引數。隨後,每當這些引數中的任何一個的活動值發生變化時,都會發送一個 ParameterStatus 訊息。

RowDescription(‘T’)訊息為所描述行的每一列攜帶新的表 OID 和列號欄位。它還顯示每一列的格式程式碼。

CursorResponse(‘P’)訊息不再由後端生成。

NotificationResponse(‘A’)訊息有一個額外的字串欄位,可以攜帶從 NOTIFY 事件傳送者傳遞的“payload”字串。

EmptyQueryResponse(‘I’)訊息曾經包含一個空字串引數;該引數已被移除。

提交更正

如果您在文件中發現任何不正確、與您對特定功能的體驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。