第 52 章 前端/后端协议

目录

52.1. 概述
52.1.1. 消息概貌
52.1.2. 扩展查询概述
52.1.3. 格式和格式代码
52.2. 消息流
52.2.1. 启动
52.2.2. 简单查询
52.2.3. 扩展查询
52.2.4. 函数调用
52.2.5. COPY操作
52.2.6. 异步操作
52.2.7. 取消正在处理的请求
52.2.8. 终止
52.2.9. SSL会话加密
52.2.10. GSSAPI 会话加密
52.3. SASL认证
52.3.1. SCRAM-SHA-256认证
52.4. 流复制协议
52.5. 逻辑流复制协议
52.5.1. 逻辑流复制参数
52.5.2. 逻辑复制协议消息
52.5.3. 逻辑复制协议的消息流
52.6. 消息数据类型
52.7. 消息格式
52.8. 错误和通知消息域
52.9. 逻辑复制消息格式
52.10. 自协议2.0以来的变化总结

PostgreSQL使用一种基于消息的协议用于前端和后端(服务器和客户机)之间通讯。该协议是在TCP/IP和Unix 域套接字上实现的。端口号 5432 已经在IANA 注册为支持这种协议的服务器的常用端口,但实际上任何非特权端口号都可以使用。

这份文档描述了版本3.0的协议,它在PostgreSQL版本 7.4 和以后的版本中实现。对于以前版本协议的描述,请参考以前版本的PostgreSQL文档。一台服务器能够支持多种协议版本。初始的启动请求消息告诉服务器客户端尝试使用哪个协议版本。如果客户端请求的主版本不被服务器支持,连接将被拒绝(例如,如果客户端请求的协议版本是4.0就会发生这种情况,因为在写作这份文档时,4.0根本还不存在)。如果客户端请求的次版本不被服务器支持(例如客户端请求版本3.1,但服务器仅支持3.0),服务器可能会拒绝该连接或者用一个包含它支持的最高次协议版本的NegotiateProtocolVersion消息进行响应。然后客户端可以选择使用指定的协议版本继续连接或者中止连接。

为了可以有效地为多个客户端提供服务,服务器为每个客户端派生一个新的后端进程。 在目前的实现里,在检测到新来的连接请求后,马上创建一个新的子进程。 不过,这些是对协议透明的。对于协议而言,术语后端服务器是可以互换的; 类似的还有前端客户端也是可以互换的。