支援的版本: 目前 (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

53.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 期間的終止符,但其使用已被棄用,最終將被刪除。) 支援二進位 COPY。 CopyInResponse 和 CopyOutResponse 訊息包含指示欄數和每個欄位的格式的欄位。

FunctionCall 和 FunctionCallResponse 訊息的版面配置已變更。 FunctionCall 現在可以支援將 NULL 參數傳遞給函數。 它還可以處理以文字或二進位格式傳遞參數和檢索結果。 沒有理由再將 FunctionCall 視為潛在的安全漏洞,因為它不提供對內部伺服器資料表示形式的直接存取。

後端會在連線啟動期間為所有它認為用戶端程式庫感興趣的參數傳送 ParameterStatus('S')訊息。 隨後,每當這些參數的活動值發生變更時,就會傳送 ParameterStatus 訊息。

RowDescription('T')訊息攜帶了所述列的每一欄的新表格 OID 和欄號欄位。 它還顯示了每個欄位的格式代碼。

後端不再產生 CursorResponse('P')訊息。

NotificationResponse('A')訊息有一個額外的字串欄位,可以攜帶從 NOTIFY 事件傳送者傳遞的有效負載字串。

EmptyQueryResponse('I')訊息過去包含一個空字串參數;這已被刪除。

提交更正

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