选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.5 已于 2021 年 2 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

50.7. 自协议 2.0 以来的变更总结 #

本节提供一份简要的变更清单,供准备将现有客户端库更新到协议 3.0 的开发者参考。

初始启动包采用灵活的字符串列表格式,取代了固定格式。注意,运行时参数的会话默认值现在可以直接在启动包中指定。(实际上,以前也能通过 options 字段实现,但由于 options 的宽度有限,且无法用引号保护值中的空白字符,这种方法并不稳妥。)

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

ErrorResponse 和 NoticeResponse('E' 和 'N')消息现在包含多个字段,客户端代码可以利用这些字段组合出所需详细程度的错误消息。注意,各字段通常不会以换行符结束,而旧协议发送的单个字符串总是以换行符结束。

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

BinaryRow 与 DataRow 消息类型不再有区别;单一的 DataRow 消息类型用于返回所有格式的数据。注意,DataRow 的布局已经改变,使其更容易解析。另外,二进制值的表示方式也已改变,不再直接取决于服务器内部的表示方式。

新增了扩展查询子协议,其中增加了前端消息类型 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 事件发送者传来的载荷字符串。

EmptyQueryResponse('I')消息以前包含一个空字符串参数,现在已将其移除。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。