# 53.10.自协议2.0以来的变化摘要

本节提供了一个快速的更改清单,供试图将现有客户端库更新为协议3.0的开发人员使用。

初始启动数据包使用灵活的字符串列表格式,而不是固定格式。请注意,运行时参数的会话默认值现在可以直接在启动数据包中指定。(实际上,你可以在使用选项字段,但考虑到选项由于没有任何方法在值中引用空格,这不是一种非常安全的技术。)

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

错误响应和通知响应('E“还有”N“)消息现在包含多个字段,客户机代码可以从中汇编所需详细程度的错误消息。请注意,单个字段通常不会以换行符结尾,而在旧协议中发送的单个字符串总是以换行符结尾。

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

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

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

复制数据现在被封装到CopyData和CopyDone消息中。有一种定义明确的方法可以在测试过程中从错误中恢复复制“特别的”\.“最后一行不再需要,也不会在抄写(在电影中,它仍然被认为是终结者。)抄送,但它的使用已被弃用,最终将被删除。)二进制的复制支持。CopyInResponse和CopyOutResponse消息包括指示列数和每列格式的字段。

FunctionCall和FunctionCallResponse消息的布局已更改。FunctionCall现在可以支持向函数传递空参数。它还可以处理以文本或二进制格式传递参数和检索结果。不再有任何理由考虑函数调用潜在的安全漏洞,因为它不提供对内部服务器数据表示的直接访问。

后端发送参数status('S“)在连接启动期间为客户端库认为有趣的所有参数发送消息。随后,只要这些参数中的任何一个的活动值发生变化,就会发送ParameterStatus消息。

罗恩说:T“)消息为所描述行的每一列携带新的表OID和列号字段。它还显示了每列的格式代码。

诅咒者回应道:P“)消息不再由后端生成。

NotificationResponse('A.“)消息有一个额外的字符串字段,可以携带从通知事件发送者。

空的QueryResponse('“)消息,用于包含空字符串参数;这个已经被移除了。