↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4 / 7.3 / 7.2 / 7.1 / 7.0 / 6.5 / 6.4
历史版本。 PostgreSQL 7.0 已结束支持。 请参阅 当前版本手册.

第 64 章 前端/后端协议

Phil Thompson

注意

由 Phil Thompson 编写。协议 2.0 的更新由 Tom Lane 完成。

Postgres 使用基于消息的前端与后端之间的通信协议。该协议在 TCP/IP 以及 Unix 套接字之上实现。Postgres v6.3 在协议中引入了版本号。这样做的目的是仍然允许来自早期版本前端的连接,但本文档不涵盖那些早期版本使用的协议。

本文档描述该协议的 2.0 版,它在 Postgres v6.4 及更高版本中实现。

建立在此协议之上的更高层特性(例如 libpq 在连接建立后如何传递某些环境变量)在别处介绍。

64.1. Overview

三个主要组件是前端(运行在客户端上)以及 postmaster 和后端(运行在服务器上)。postmaster 和后端有不同的角色,但可以由同一个可执行程序实现。

前端向 postmaster 发送一个启动包。其中包括用户要连接的用户名和数据库名。然后 postmaster 使用这些信息以及 pg_hba.conf(5) 文件中的信息来确定它要求前端进一步发送什么认证信息(如果有的话),并相应地响应前端。

然后前端发送任何所需的认证信息。postmaster 验证这些信息后,响应前端已通过认证,并把连接移交给一个后端。然后后端发送一条消息指示启动成功(正常情况)或失败(例如数据库名无效)。

随后的通信是前端与后端之间交换的查询和结果包。postmaster 不再参与普通的查询/结果通信。(However, the postmaster is involved when the frontend wishes to cancel a query currently being executed by its backend. Further details about that appear below.)

当前端希望断开连接时,它发送一个适当的包并关闭连接,而不等待后端的响应。

包以数据流的形式发送。第一个字节决定包的其余部分应期待什么。例外是前端发送给 postmaster 的包,它们由包长度后跟包本身组成。这一差异是历史原因造成的。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.