2024 年 9 月 26 日: PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:devel
不支持的版本: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') 消息曾经包含一个空字符串参数;此参数已删除。

提交更正

如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符或需要进一步澄清,请使用 此表格 报告文档问题。