支持的版本: 当前 (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') 消息过去包含一个空字符串参数;这已被删除。

提交更正

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