Postgresql 中文操作指南

55.10. Summary of Changes since Protocol 2.0 #

本节提供了更改的快速清单,这将有助于尝试将现有客户端库更新到协议 3.0 的开发者。

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

现在所有消息都紧跟消息类型字节(对于没有类型字节的启动数据,除外),有一个长度计数。另请注意,PasswordMessage 现在有一个类型字节。

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

ReadyForQuery('Z')消息包含事务状态指示器。

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

新增了一个“Extended Query”子协议,它添加了前端消息类型 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 事件发送方传递的“payload”字符串。

EmptyQueryResponse('I')消息过去包含一个空字符串参数;此参数已移除。