↑↓ 选择 ↵ 打开 ⌫ 改范围 完整检索页

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 / 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 已于 2005 年 5 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本。

第 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 的包,它们由包长度后跟包本身组成。这一差异是历史原因造成的。

提交更正

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