Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16 / 17

53.10. 自协议 2.0 以后的一些改动总结 #

本节提供一份改动清单,以便开发者更新现有客户端库至协议 3.0。

初始启动数据包使用灵活的字符串列表格式,而不是固定格式。请注意,运行时参数的会话默认值现在可以直接在启动数据包中指定。(事实上,你可以使用 options 字段在此之前进行操作,但是鉴于 options 具有有限的宽度,并且没有办法对值中的空白进行引用,这并不是一种很安全的技术。)

所有消息现在在消息类型后立即都有一个长度计数(启动数据包除外,没有类型字节)。还要注意的是,PasswordMessage 现在有一个类型字节。

ErrorResponse 和 NoticeResponse('E' 和 'N')消息现在包含多个字段,客户端代码可以从中组装所需详细级别的错误消息。请注意,每个字段通常不会以换行符结尾,而旧协议中发送的单个字符串总是以换行符结尾。

ReadyForQuery('Z')消息包括一个事务状态指示符。

BinaryRow 和 DataRow 消息类型之间的区别已不复存在;单一 DataRow 消息类型用于以所有格式返回数据。请注意,DataRow 的布局已更改,以便于解析。此外,二进制值的表示形式已更改:不再直接与服务器的内部表示形式相关联。

有一个新的 扩展查询 子协议,该协议添加了 frontend 消息类型 Parse、Bind、Execute、Describe、Close、Flush 和 Sync,以及 backend 消息类型 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’)消息用于包含空字符串参数;此项已移除。