pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
目录
由 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 在连接建立后如何传递某些环境变量)在别处介绍。
前端打开一个到服务器的连接并发送一个启动包。其中包括用户要连接的用户名和数据库名。然后服务器使用这些信息以及 pg_hba.conf 文件中的信息来确定它要求前端进一步发送什么认证信息(如果有的话),并相应地响应前端。
然后前端发送任何所需的认证信息。服务器验证这些信息后,响应前端已通过认证,并发送一条消息指示启动成功(正常情况)或失败(例如数据库名无效)。
为了高效地为多个客户端服务,服务器为每个客户端启动一个新的后端进程。但这对协议是透明的。在当前的实现中,检测到传入连接后会立即创建一个新的子进程。
当前端希望断开连接时,它发送一个适当的包并关闭连接,而不等待后端的响应。
包以数据流的形式发送。第一个字节决定包的其余部分应期待什么。例外是作为启动和认证交换一部分发送的包,它们由包长度后跟包本身组成。这一差异是历史原因造成的。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。