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

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

第 4 章 前端/后端协议

注意

由 Phil Thompson(phil@river-bank.demon.co.uk)编写。协议 2.0 的更新由 Tom Lane(tgl@sss.pgh.pa.us)完成。

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

本文档描述该协议的 2.0 版,它在 PostgreSQL 6.4 及更高版本中实现。

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

4.1. Overview #

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

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

为了高效地为多个客户端服务,服务器为每个客户端启动一个新的后端进程。但这对协议是透明的。在当前的实现中,检测到传入连接后会立即创建一个新的子进程。

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

包以数据流的形式发送。第一个字节决定包的其余部分应期待什么。例外是作为启动和认证交换一部分发送的包,它们由包长度后跟包本身组成。这一差异是历史原因造成的。

提交更正

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