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

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

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

59.4. 消息格式

本节描述每条消息的详细格式。每条消息都可以由 frontend(F)、postmaster/backend(B)或两者(F & B)发送。

AsciiRow (B)
Byte1('D')

标识此消息为 ASCII 数据行。(先前的 RowDescription 消息定义了行中字段的数量及其数据类型。)

Byten

一个位图,行中每个字段一位。第 1 个字段对应第 1 个字节的第 7 位(MSB),第 2 个字段对应第 1 个字节的第 6 位,第 8 个字段对应第 1 个字节的第 0 位(LSB),第 9 个字段对应第 2 个字节的第 7 位,依此类推。如果对应字段的值不是 NULL,则每个位被置位。如果字段数不是 8 的倍数,位图中最后一个字节的剩余部分就被浪费了。

然后,对每个非 NULL 值的字段,有下列内容:

Int32

Specifies the size of the value of the field, including this size.

Byten

以 ASCII 字符指定字段本身的值。n 是上面的尺寸减 4。字段数据中没有尾随的 '\0';如果前端需要,必须自己添加一个。

AuthenticationOk (B)
Byte1('R')

标识此消息为认证请求。

Int32(0)

指定认证成功。

AuthenticationKerberosV4 (B)
Byte1('R')

标识此消息为认证请求。

Int32(1)

指定需要 Kerberos V4 认证。

AuthenticationKerberosV5 (B)
Byte1('R')

标识此消息为认证请求。

Int32(2)

指定需要 Kerberos V5 认证。

AuthenticationUnencryptedPassword (B)
Byte1('R')

标识此消息为认证请求。

Int32(3)

指定需要未加密的密码。

AuthenticationEncryptedPassword (B)
Byte1('R')

标识此消息为认证请求。

Int32(4)

指定需要加密的密码。

Byte2

加密密码时使用的盐。

BackendKeyData (B)
Byte1('K')

标识此消息为取消密钥数据。如果前端希望以后能够发出 CancelRequest 消息,就必须保存这些值。

Int32

此后端的进程 ID。

Int32

此后端的密钥。

BinaryRow (B)
Byte1('B')

标识此消息为二进制数据行。(先前的 RowDescription 消息定义了行中字段的数量及其数据类型。)

Byten

一个位图,行中每个字段一位。第 1 个字段对应第 1 个字节的第 7 位(MSB),第 2 个字段对应第 1 个字节的第 6 位,第 8 个字段对应第 1 个字节的第 0 位(LSB),第 9 个字段对应第 2 个字节的第 7 位,依此类推。如果对应字段的值不是 NULL,则每个位被置位。如果字段数不是 8 的倍数,位图中最后一个字节的剩余部分就被浪费了。

然后,对每个非 NULL 值的字段,有下列内容:

Int32

Specifies the size of the value of the field, excluding this size.

Byten

以二进制格式指定字段本身的值。n 是上面的尺寸。

CancelRequest (F)
Int32(16)

包的尺寸(字节)。

Int32(80877102)

取消请求码。该值经过选择,使其高 16 位包含 1234,低 16 位包含 5678。 (To avoid confusion, this code must not be the same as any protocol version number.)

Int32

目标后端的进程 ID。

Int32

目标后端的密钥。

CompletedResponse (B)
Byte1('C')

标识此消息为完成响应。

String

命令标签。这通常是(但不总是)标识完成了哪条 SQL 命令的单个词。

CopyDataRows (B & F)

这是一个行流,其中每行以 Byte1('\n') 结束。然后跟随序列 Byte1('\\')、Byte1('.')、Byte1('\n')。

CopyInResponse (B)
Byte1('G')

标识此消息为 Start Copy In 响应。前端现在必须发送 CopyDataRows 消息。

CopyOutResponse (B)
Byte1('H')

标识此消息为 Start Copy Out 响应。此消息后面将跟随 CopyDataRows 消息。

CursorResponse (B)
Byte1('P')

标识此消息为游标响应。

String

游标的名称。如果游标是隐式的,则为“blank”。

EmptyQueryResponse (B)
Byte1('I')

标识此消息为对空查询串的响应。

String("")

未使用。

EncryptedPasswordPacket (F)
Int32

包的尺寸(字节)。

String

加密(使用 crypt())的密码。

ErrorResponse (B)
Byte1('E')

标识此消息为错误。

String

错误消息本身。

FunctionCall (F)
Byte1('F')

标识此消息为函数调用。

String("")

未使用。

Int32

指定要调用的函数的对象 ID。

Int32

指定提供给函数的参数数量。

然后,对每个参数,有下列内容:

Int32

Specifies the size of the value of the argument, excluding this size.

Byten

以二进制格式指定字段本身的值。n 是上面的尺寸。

FunctionResultResponse (B)
Byte1('V')

标识此消息为函数调用结果。

Byte1('G')

指定返回了非空结果。

Int32

指定结果的值的尺寸,不包括此尺寸本身。

Byten

以二进制格式指定结果本身的值。n 是上面的尺寸。

Byte1('0')

未使用。(严格说来,FunctionResultResponse 和 FunctionVoidResponse 是同一个东西,只是消息的某些 部分是可选的。)

FunctionVoidResponse (B)
Byte1('V')

标识此消息为函数调用结果。

Byte1('0')

指定返回了空结果。

NoticeResponse (B)
Byte1('N')

标识此消息为通知。

String

通知消息本身。

NotificationResponse (B)
Byte1('A')

标识此消息为通知响应。

Int32

发出通知的后端进程的进程 ID。

String

引发此通知的条件名称。

Query (F)
Byte1('Q')

标识此消息为查询。

String

查询串本身。

ReadyForQuery (B)
Byte1('Z')

标识消息类型。每当后端准备好进入新的查询周期时发送 ReadyForQuery。

RowDescription (B)
Byte1('T')

标识此消息为行描述。

Int16

指定一行中的字段数(可以为零)。

Then, for each field, there is the following:

String

指定字段名。

Int32

指定字段类型的对象 ID。

Int16

指定类型尺寸。

Int32

指定类型修饰符。

StartupPacket (F)
Int32(296)

包的尺寸(字节)。

Int32

协议版本号。高 16 位是主版本号。低 16 位是次版本号。

LimString64

数据库名,如果为空则默认为用户名。

LimString32

用户名。

LimString64

要由 postmaster 传递给后端的任何附加命令行参数。

LimString64

未使用。

LimString64

后端应用于调试消息的可选 tty。

Terminate (F)
Byte1('X')

标识此消息为终止。

UnencryptedPasswordPacket (F)
Int32

包的尺寸(字节)。

String

未加密的密码。

提交更正

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