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’)消息曾经包含一个空字符串参数;该参数已被移除。

提交更正

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