# 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('我
“)消息,用于包含空字符串参数;这个已经被移除了。