52.10. 自协议 2.0 以来的更改摘要

本部分提供了更改的快速清单,以使开发人员尝试将现有的 Client 端库更新为协议 3.0.

初始启动数据包使用灵活的字符串列表格式,而不是固定格式。注意,现在可以直接在启动包中指定运行时参数的会话默认值。 (实际上,您可以在使用options字段之前进行此操作,但是鉴于options的宽度有限,并且缺少在值中引用空格的任何方法,因此这不是一种非常安全的技术.)

现在,所有消息在消息类型字节之后都有一个长度计数(启动包除外,它没有类型字节)。还请注意,PasswordMessage 现在具有类型字节。

现在,ErrorResponse 和 NoticeResponse(“ E”和“ N”)消息包含多个字段,Client 端代码可以从这些字段中组合所需详细程度的错误消息。请注意,单个字段通常不会以换行符结尾,而在旧协议中发送的单个字符串总是会以换行符结尾。

ReadyForQuery('Z')消息包括 Transaction 状态指示器。

BinaryRow 和 DataRow 消息类型之间的区别消失了。单个 DataRow 消息类型用于返回所有格式的数据。请注意,DataRow 的布局已更改,以使其更易于解析。同样,二进制值的表示形式也发生了变化:它不再直接与服务器的内部表示形式绑定在一起。

有一个新的“扩展查询”子协议,它添加了前端消息类型 Parse,Bind,Execute,Describe,Close,Flush 和 Sync,以及后端消息类型 ParseComplete,BindComplete,PortalSuspended,ParameterDescription,NoData 和 CloseComplete 。现有 Client 不必担心此子协议,但是使用它可能会提高性能或功能。

COPY数据现在被封装到 CopyData 和 CopyDone 消息中。有一种明确定义的方法可以从COPY期间的错误中恢复。不再需要特殊的“ \.”最后一行,并且不会在COPY OUT期间发送。 (在COPY IN期间仍将其识别为终止符,但已弃用它,最终将其删除.)支持二进制COPY。 CopyInResponse 和 CopyOutResponse 消息包括指示列数和每列格式的字段。

FunctionCall 和 FunctionCallResponse 消息的布局已更改。 FunctionCall 现在可以支持将 NULL 参数传递给函数。它还可以处理传递参数和以文本或二进制格式检索结果。不再需要将 FunctionCall 视为潜在的安全漏洞,因为它不能直接访问内部服务器数据表示形式。

后端在连接启动期间针对 Client 端库认为它感兴趣的所有参数发送 ParameterStatus('S')消息。随后,只要这些参数中任何一个的有效值发生变化,就会发送 ParameterStatus 消息。

RowDescription('T')消息包含所描述行的每一列的新表 OID 和列号字段。它还显示每列的格式代码。

后端不再生成 CursorResponse('P')消息。

NotificationResponse('A')消息具有一个附加的字符串字段,该字段可以携带从NOTIFY事件发送者传递的“有效载荷”字符串。

EmptyQueryResponse('I')消息,用于包含一个空字符串参数;这已被删除。