pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
Postgres 使用基于消息的协议在前端和后端之间通信。该协议在 TCP/IP 上实现,也在 Unix 套接字上实现。 Postgres v6.3 在协议中引入了版本号。 这样做仍然 允许来自早期版本前端的连接,但 本文档不涵盖那些早期版本所使用的协议。
本文档描述最初的带版本号的协议,即 v1.0。 建立在该协议之上的更高层特性(例如 libpq 在连接建立之后 如何传递某些环境变量) 在别处介绍。
三个主要组件是前端(运行在客户端上)以及 postmaster 和后端(运行在服务器上)。postmaster 和后端 角色不同,但可以由同一个可执行程序实现。
前端向 postmaster 发送一个启动包。其中包括 用户想要连接的用户名和数据库名。postmaster 然后 使用它以及 pg_hba.conf(5) 文件中的信息,确定它要求前端 进一步发送哪些认证信息(如果有的话), 并相应地响应前端。
前端然后发送所需的任何认证信息。一旦 postmaster 验证通过,它就响应前端已通过认证, 并移交给一个后端。
随后的通信是在前端和后端之间交换的查询和结果包。 postmaster 不再参与 通信。
当前端希望断开连接时,它发送一个适当的包并 关闭连接,而不等待后端的响应。
包以数据流的形式发送。第一个字节决定包的 其余部分应有什么内容。例外的是从 前端发送到 postmaster 的包,它们由一个包长度和包本身 组成。这一差异是历史原因造成的。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。