pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。
本节描述消息流。根据连接的状态, 有四种不同类型的 流:认证、查询、函数调用和终止。
前端发送一个 StartupPacket。postmaster 使用它以及 pg_hba.conf(5) 文件的内容确定前端 必须使用哪种认证方法。postmaster 然后用下列消息之一响应:
然后 postmaster 立即关闭连接。
然后 postmaster 移交给后端。postmaster 不再参与通信。
然后前端必须与 postmaster 进行 Kerberos V4 认证对话(此处不描述)。如果成功,postmaster 以 AuthenticationOk 响应,否则以 ErrorResponse 响应。
然后前端必须与 postmaster 进行 Kerberos V5 认证对话(此处不描述)。如果成功,postmaster 以 AuthenticationOk 响应,否则以 ErrorResponse 响应。
然后前端必须发送一个 UnencryptedPasswordPacket。如果密码正确,postmaster 以 AuthenticationOk 响应,否则以 ErrorResponse 响应。
然后前端必须发送一个 EncryptedPasswordPacket。如果密码正确,postmaster 以 AuthenticationOk 响应,否则以 ErrorResponse 响应。
如果前端不支持 postmaster 请求的认证方法,那么它应当立即关闭连接。
前端向后端发送一条 Query 消息。后端发送的 响应取决于查询的内容。可能的响应 如下。
查询正常完成。
后端准备好把数据从前端复制到关系。前端然后应发送 CopyDataRows 消息。后端随后将以带 "COPY" 标签的 CompletedResponse 消息响应。
后端准备好把数据从关系复制到前端。然后它发送 CopyDataRows 消息,再发送带 "COPY" 标签的 CompletedResponse 消息。
查询是 insert(l)、delete(l)、update(l)、fetch(l) 或 select(l) 命令之一。如果事务已被中止,则后端发送带 "*ABORT STATE*" 标签的 CompletedResponse 消息。否则发送以下响应。
对于 insert(l) 命令,后端随后发送一条 带 "INSERT oid rows" 标签的 CompletedResponse 消息, 其中 rows 是插入的行数,oid 在 rows 为 1 时是所插入行的对象 ID,否则 oid 为 0。
对于 delete(l) 命令,后端随后发送一条 带 "DELETE rows" 标签的 CompletedResponse 消息, 其中 rows 是删除的行数。
对于 update(l) 命令,后端随后发送一条 带 "UPDATE rows" 标签的 CompletedResponse 消息, 其中 rows 是更新的行数。
对于 fetch(l) 或 select(l) 命令,后端发送一条 RowDescription 消息。然后对返回给前端的每一行, 跟着一条 AsciiRow 或 BinaryRow 消息(取决于是否指定了 二进制游标)。最后,后端发送一条带 "SELECT" 标签的 CompletedResponse 消息。
查询为空。
发生了一个错误。
发出了与查询有关的警告消息。通知是其他响应之外的附加内容,即后端会立即发送另一条响应消息。
对一个先前执行过 listen(l) 命令的关系执行了 notify(l) 命令。通知是其他响应之外的附加内容,即后端会立即发送另一条响应消息。
每当期待任何其他类型的消息时,前端必须准备好接受 ErrorResponse 和 NoticeResponse 消息。
前端向后端发送一条 FunctionCall 消息。后端发送的 响应取决于函数调用的结果。可能的响应 如下。
发生了一个错误。
函数调用已执行并返回了结果。
函数调用已执行但没有返回结果。
发出了与函数调用有关的警告消息。通知是其他响应之外的附加内容,即后端会立即发送另一条响应消息。
每当期待任何其他类型的消息时,前端必须准备好接受 ErrorResponse 和 NoticeResponse 消息。
前端发送一条 Terminate 消息并立即关闭连接。 收到该消息后,后端立即关闭连接并 终止。
译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。