# 第 53 章前端/后端协议

目录

53.1.概述

53.1.1.消息概述

53.1.2.扩展查询概述

53.1.3.格式和格式代码

53.2.消息流

53.2.1.启动

53.2.2.简单查询

53.2.3.扩展查询

53.2.4.函数调用

53.2.5.复制操作

53.2.6.异步操作

53.2.7.取消正在进行的请求

53.2.8.终止

53.2.9.SSL 会话加密

53.2.10. GSSAPI会话加密

53.3. SASL认证

53.3.1. SCRAM-SHA-256身份验证

53.4. 流复制协议

53.5. 逻辑流复制协议

53.5.1. 逻辑流复制参数

53.5.2. 逻辑复制协议消息

53.5.3. 逻辑复制协议消息流

53.6. 消息数据类型

53.7. 消息格式

53.8. 错误和通知消息字段

53.9. 逻辑复制消息格式

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

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

本文档描述了协议的3.0版本,在PostgreSQL 7.4及更高版本中实现。有关早期协议版本的描述,请参阅PostgreSQL文档的早期版本。一台服务器可以支持多个协议版本。初始启动请求消息告诉服务器客户端正在尝试使用哪个协议版本。如果服务器不支持客户机请求的主版本,则连接将被拒绝(例如,如果客户机请求的协议版本为4.0,则会发生这种情况,截至本文撰写之时,该版本还不存在)。如果服务器不支持客户端请求的次要版本(例如,客户端请求3.1版,但服务器仅支持3.0版),服务器可能会拒绝连接,或者会使用包含其支持的最高次要协议版本的NegotiateProtocolVersion消息进行响应。然后,客户端可以选择使用指定的协议版本继续连接,也可以选择中止连接。

为了高效地为多个客户端提供服务,服务器为每个客户端启动一个新的“后端”进程。在当前的实现中,在检测到传入连接后立即创建一个新的子进程。然而,这对协议来说是透明的。就协议而言,术语“后端”和“服务器”可以互换;同样,“前端”和“客户端”也可以互换。