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

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

不受支持的版本: 7.0 / 6.5 / 6.4 / 6.3
历史版本PostgreSQL 6.3 已于 2003 年 3 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本手册首页。

51.2. 协议

本节描述消息流。根据连接的状态, 有四种不同类型的 流:认证、查询、函数调用和终止。

51.2.1. 认证

前端发送一个 StartupPacket。postmaster 使用它以及 pg_hba.conf(5) 文件的内容确定前端 必须使用哪种认证方法。postmaster 然后用下列消息之一响应:

ErrorResponse

然后 postmaster 立即关闭连接。

AuthenticationOk

然后 postmaster 移交给后端。postmaster 不再参与通信。

AuthenticationKerberosV4

然后前端必须与 postmaster 进行 Kerberos V4 认证对话(此处不描述)。如果成功,postmaster 以 AuthenticationOk 响应,否则以 ErrorResponse 响应。

AuthenticationKerberosV5

然后前端必须与 postmaster 进行 Kerberos V5 认证对话(此处不描述)。如果成功,postmaster 以 AuthenticationOk 响应,否则以 ErrorResponse 响应。

AuthenticationUnencryptedPassword

然后前端必须发送一个 UnencryptedPasswordPacket。如果密码正确,postmaster 以 AuthenticationOk 响应,否则以 ErrorResponse 响应。

AuthenticationEncryptedPassword

然后前端必须发送一个 EncryptedPasswordPacket。如果密码正确,postmaster 以 AuthenticationOk 响应,否则以 ErrorResponse 响应。

如果前端不支持 postmaster 请求的认证方法,那么它应当立即关闭连接。

51.2.2. 查询

前端向后端发送一条 Query 消息。后端发送的 响应取决于查询的内容。可能的响应 如下。

CompletedResponse

查询正常完成。

CopyInResponse

后端准备好把数据从前端复制到关系。前端然后应发送 CopyDataRows 消息。后端随后将以带 "COPY" 标签的 CompletedResponse 消息响应。

CopyOutResponse

后端准备好把数据从关系复制到前端。然后它发送 CopyDataRows 消息,再发送带 "COPY" 标签的 CompletedResponse 消息。

CursorResponse

查询是 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 消息。

EmptyQueryResponse

查询为空。

ErrorResponse

发生了一个错误。

NoticeResponse

发出了与查询有关的警告消息。通知是其他响应之外的附加内容,即后端会立即发送另一条响应消息。

NotificationResponse

对一个先前执行过 listen(l) 命令的关系执行了 notify(l) 命令。通知是其他响应之外的附加内容,即后端会立即发送另一条响应消息。

每当期待任何其他类型的消息时,前端必须准备好接受 ErrorResponse 和 NoticeResponse 消息。

51.2.3. 函数调用

前端向后端发送一条 FunctionCall 消息。后端发送的 响应取决于函数调用的结果。可能的响应 如下。

ErrorResponse

发生了一个错误。

FunctionResultResponse

函数调用已执行并返回了结果。

FunctionVoidResponse

函数调用已执行但没有返回结果。

NoticeResponse

发出了与函数调用有关的警告消息。通知是其他响应之外的附加内容,即后端会立即发送另一条响应消息。

每当期待任何其他类型的消息时,前端必须准备好接受 ErrorResponse 和 NoticeResponse 消息。

51.2.4. 终止

前端发送一条 Terminate 消息并立即关闭连接。 收到该消息后,后端立即关闭连接并 终止。

提交更正

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