支持的版本: 当前 (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')消息曾经包含一个空字符串参数;现在已将其删除。

提交更正

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