本节描述每个消息的详细格式。每个消息都标记为可以由前端 (F)、后端 (B) 或两者 (F & B) 发送。请注意,尽管每个消息的开头都包含一个字节计数,但消息格式的定义使得可以在不参考字节计数的情况下找到消息的结尾。这有助于有效性检查。(CopyData 消息是一个例外,因为它构成数据流的一部分;任何单独的 CopyData 消息的内容本身都无法解释。)
将消息标识为身份验证请求。
消息内容(包括自身)的长度(以字节为单位)。
指定身份验证成功。
将消息标识为身份验证请求。
消息内容(包括自身)的长度(以字节为单位)。
指定需要 Kerberos V5 身份验证。
将消息标识为身份验证请求。
消息内容(包括自身)的长度(以字节为单位)。
指定需要明文密码。
将消息标识为身份验证请求。
消息内容(包括自身)的长度(以字节为单位)。
指定需要 MD5 加密的密码。
加密密码时使用的盐。
将消息标识为身份验证请求。
消息内容(包括自身)的长度(以字节为单位)。
指定需要 GSSAPI 身份验证。
将消息标识为身份验证请求。
消息内容(包括自身)的长度(以字节为单位)。
指定此消息包含 GSSAPI 或 SSPI 数据。
n
GSSAPI 或 SSPI 身份验证数据。
将消息标识为身份验证请求。
消息内容(包括自身)的长度(以字节为单位)。
指定需要 SSPI 身份验证。
将消息标识为身份验证请求。
消息内容(包括自身)的长度(以字节为单位)。
指定需要 SASL 身份验证。
消息主体是 SASL 身份验证机制的列表,按服务器的优先级排序。最后一个身份验证机制名称后需要一个零字节作为终止符。对于每个机制,都有以下内容
SASL 身份验证机制的名称。
将消息标识为身份验证请求。
消息内容(包括自身)的长度(以字节为单位)。
指定此消息包含 SASL 质询。
n
SASL 数据,特定于正在使用的 SASL 机制。
将消息标识为身份验证请求。
消息内容(包括自身)的长度(以字节为单位)。
指定 SASL 身份验证已完成。
n
SASL 结果“附加数据”,特定于正在使用的 SASL 机制。
将消息标识为取消密钥数据。如果前端希望稍后能够发出 CancelRequest 消息,则必须保存这些值。
消息内容(包括自身)的长度(以字节为单位)。
此后端的进程 ID。
此后端的密钥。
将消息标识为 Bind 命令。
消息内容(包括自身)的长度(以字节为单位)。
目标门户的名称(空字符串选择未命名的门户)。
源预处理语句的名称(空字符串选择未命名的预处理语句)。
下面要跟随的参数格式代码的数量(表示为下面的C
)。这可以为零,表示没有参数或者参数都使用默认格式(文本);或者为一,在这种情况下,指定的格式代码将应用于所有参数;或者它可以等于参数的实际数量。
C
]参数格式代码。每个代码当前必须为零(文本)或一(二进制)。
下面要跟随的参数值的数量(可能为零)。这必须与查询需要的参数数量匹配。
接下来,每个参数都会出现以下字段对
参数值的长度(以字节为单位)(此计数不包括自身)。可以为零。作为一种特殊情况,-1 表示 NULL 参数值。在 NULL 情况下,后面没有值字节。
n
参数的值,格式由关联的格式代码指示。n
是上面的长度。
在最后一个参数之后,会出现以下字段
下面要跟随的结果列格式代码的数量(表示为下面的R
)。这可以为零,表示没有结果列或者结果列都应使用默认格式(文本);或者为一,在这种情况下,指定的格式代码将应用于所有结果列(如果有);或者它可以等于查询的实际结果列数。
R
]结果列格式代码。每个代码当前必须为零(文本)或一(二进制)。
将消息标识为 Bind 完成指示符。
消息内容(包括自身)的长度(以字节为单位)。
消息内容(包括自身)的长度(以字节为单位)。
取消请求代码。选择该值是为了在最高有效 16 位中包含 1234
,在最低有效 16 位中包含 5678
。(为避免混淆,此代码不得与任何协议版本号相同。)
目标后端的进程 ID。
目标后端的密钥。
将消息标识为 Close 命令。
消息内容(包括自身)的长度(以字节为单位)。
'S
' 用于关闭预处理语句;或 'P
' 用于关闭门户。
要关闭的预处理语句或门户的名称(空字符串选择未命名的预处理语句或门户)。
将消息标识为 Close 完成指示符。
消息内容(包括自身)的长度(以字节为单位)。
将消息标识为命令完成响应。
消息内容(包括自身)的长度(以字节为单位)。
命令标记。这通常是一个单词,用于标识完成的 SQL 命令。
对于 INSERT
命令,标记为 INSERT
,其中 oid
rows
rows
是插入的行数。oid
过去是指插入行的对象 ID,如果 rows
为 1 并且目标表有 OID,但 OID 系统列不再受支持;因此,oid
始终为 0。
对于 DELETE
命令,标签是 DELETE
,其中 rows
rows
是删除的行数。
对于 UPDATE
命令,标签是 UPDATE
,其中 rows
rows
是更新的行数。
对于 MERGE
命令,标签是 MERGE
,其中 rows
rows
是插入、更新或删除的行数。
对于 SELECT
或 CREATE TABLE AS
命令,标签是 SELECT
,其中 rows
rows
是检索的行数。
对于 MOVE
命令,标签是 MOVE
,其中 rows
rows
是游标位置移动的行数。
对于 FETCH
命令,标签是 FETCH
,其中 rows
rows
是从游标检索的行数。
对于 COPY
命令,标签是 COPY
,其中 rows
rows
是复制的行数。(注意:行数仅在 PostgreSQL 8.2 及更高版本中显示。)
标识消息为 COPY
数据。
消息内容(包括自身)的长度(以字节为单位)。
n
构成 COPY
数据流一部分的数据。从后端发送的消息将始终对应于单个数据行,但前端发送的消息可能会任意分割数据流。
标识消息为 COPY
完成指示符。
消息内容(包括自身)的长度(以字节为单位)。
标识消息为 COPY
失败指示符。
消息内容(包括自身)的长度(以字节为单位)。
报告为失败原因的错误消息。
标识消息为开始复制输入响应。前端现在必须发送复制输入数据(如果未准备好这样做,则发送 CopyFail 消息)。
消息内容(包括自身)的长度(以字节为单位)。
0 表示整体 COPY
格式为文本格式(行由换行符分隔,列由分隔符分隔等)。1 表示整体复制格式为二进制格式(类似于 DataRow 格式)。有关更多信息,请参阅 COPY。
要复制的数据中的列数(下面用 N
表示)。
N
]用于每个列的格式代码。每个代码目前必须为零(文本)或一(二进制)。如果整体复制格式为文本格式,则所有代码必须为零。
标识消息为开始复制输出响应。此消息后将跟随复制输出数据。
消息内容(包括自身)的长度(以字节为单位)。
0 表示整体 COPY
格式为文本格式(行由换行符分隔,列由分隔符分隔等)。1 表示整体复制格式为二进制格式(类似于 DataRow 格式)。有关更多信息,请参阅 COPY。
要复制的数据中的列数(下面用 N
表示)。
N
]用于每个列的格式代码。每个代码目前必须为零(文本)或一(二进制)。如果整体复制格式为文本格式,则所有代码必须为零。
标识消息为开始复制双向响应。此消息仅用于流复制。
消息内容(包括自身)的长度(以字节为单位)。
0 表示整体 COPY
格式为文本格式(行由换行符分隔,列由分隔符分隔等)。1 表示整体复制格式为二进制格式(类似于 DataRow 格式)。有关更多信息,请参阅 COPY。
要复制的数据中的列数(下面用 N
表示)。
N
]用于每个列的格式代码。每个代码目前必须为零(文本)或一(二进制)。如果整体复制格式为文本格式,则所有代码必须为零。
标识消息为数据行。
消息内容(包括自身)的长度(以字节为单位)。
下面跟随着的列值数量(可能为零)。
接下来,每列出现以下一对字段
列值的长度,以字节为单位(此计数不包括自身)。可以为零。在特殊情况下,-1 表示 NULL 列值。在 NULL 情况下,不跟随着任何值字节。
n
列的值,格式由关联的格式代码指示。n
是上面的长度。
标识消息为描述命令。
消息内容(包括自身)的长度(以字节为单位)。
'S
' 用于描述预备语句;或 'P
' 用于描述门户。
要描述的预备语句或门户的名称(空字符串选择未命名的预备语句或门户)。
标识消息为空查询字符串的响应。(这代替 CommandComplete。)
消息内容(包括自身)的长度(以字节为单位)。
标识消息为错误。
消息内容(包括自身)的长度(以字节为单位)。
消息体由一个或多个已标识的字段组成,后跟一个零字节作为终止符。字段可以以任何顺序出现。对于每个字段,都有以下内容
标识字段类型的代码;如果为零,则这是消息终止符,并且不跟随着字符串。目前定义的字段类型在 第 53.8 节 中列出。由于将来可能会添加更多字段类型,因此前端应静默忽略无法识别类型的字段。
字段值。
标识消息为执行命令。
消息内容(包括自身)的长度(以字节为单位)。
要执行的门户的名称(空字符串选择未命名的门户)。
要返回的最大行数,如果门户包含返回行的查询(否则将忽略)。零表示 “无限制”。
标识消息为刷新命令。
消息内容(包括自身)的长度(以字节为单位)。
标识消息为函数调用。
消息内容(包括自身)的长度(以字节为单位)。
指定要调用的函数的对象 ID。
下面跟随着的参数格式代码的数量(下面用 C
表示)。它可以为零,表示没有参数或者所有参数都使用默认格式(文本);或者为一,在这种情况下,指定的格式代码将应用于所有参数;或者它可以等于参数的实际数量。
C
]参数格式代码。每个代码目前必须为零(文本)或一(二进制)。
指定提供给函数的参数数量。
接下来,每个参数出现以下一对字段
参数值的长度,以字节为单位(此计数不包括自身)。可以为零。在特殊情况下,-1 表示 NULL 参数值。在 NULL 情况下,不跟随着任何值字节。
n
参数的值,格式由关联的格式代码指示。n
是上面的长度。
在最后一个参数之后,出现以下字段
函数结果的格式代码。目前必须为零(文本)或一(二进制)。
标识消息为函数调用结果。
消息内容(包括自身)的长度(以字节为单位)。
函数结果值的长度,以字节为单位(此计数不包括自身)。可以为零。在特殊情况下,-1 表示 NULL 函数结果。在 NULL 情况下,不跟随着任何值字节。
n
函数结果的值,格式由关联的格式代码指示。n
是上面的长度。
消息内容(包括自身)的长度(以字节为单位)。
此GSSAPI加密请求代码。选择该值使其最高有效 16 位包含 1234
,最低有效 16 位包含 5680
。(为避免混淆,此代码不得与任何协议版本号相同。)
标识消息为 GSSAPI 或 SSPI 响应。请注意,这也用于 SASL 和密码响应消息。确切的消息类型可以从上下文中推断出来。
消息内容(包括自身)的长度(以字节为单位)。
n
GSSAPI/SSPI 特定消息数据。
标识消息为协议版本协商消息。
消息内容(包括自身)的长度(以字节为单位)。
服务器为客户端请求的主要协议版本支持的最新次要协议版本。
服务器无法识别的协议选项数量。
然后,对于服务器无法识别的协议选项,有以下内容
选项名称。
标识消息为无数据指示符。
消息内容(包括自身)的长度(以字节为单位)。
标识消息为通知。
消息内容(包括自身)的长度(以字节为单位)。
消息体由一个或多个已标识的字段组成,后跟一个零字节作为终止符。字段可以以任何顺序出现。对于每个字段,都有以下内容
标识字段类型的代码;如果为零,则这是消息终止符,并且不跟随着字符串。目前定义的字段类型在 第 53.8 节 中列出。由于将来可能会添加更多字段类型,因此前端应静默忽略无法识别类型的字段。
字段值。
标识消息为通知响应。
消息内容(包括自身)的长度(以字节为单位)。
发送通知的后端进程的进程 ID。
已在其上引发通知的通道的名称。
从发送通知的进程传递的 “有效负载” 字符串。
标识消息为参数描述。
消息内容(包括自身)的长度(以字节为单位)。
语句使用的参数数量(可以为零)。
然后,对于每个参数,都有以下内容
指定参数数据类型的对象 ID。
标识消息为运行时参数状态报告。
消息内容(包括自身)的长度(以字节为单位)。
正在报告的运行时参数的名称。
参数的当前值。
标识消息为解析命令。
消息内容(包括自身)的长度(以字节为单位)。
目标预备语句的名称(空字符串选择未命名的预备语句)。
要解析的查询字符串。
指定的参数数据类型数量(可以为零)。请注意,这并不是查询字符串中可能出现的参数数量的指示,而只是前端想要为其预先指定类型的参数数量。
然后,对于每个参数,都有以下内容
指定参数数据类型的对象 ID。在此处放置零等效于保留类型未指定。
标识消息为解析完成指示符。
消息内容(包括自身)的长度(以字节为单位)。
标识消息为密码响应。请注意,这也用于 GSSAPI、SSPI 和 SASL 响应消息。确切的消息类型可以从上下文中推断出来。
消息内容(包括自身)的长度(以字节为单位)。
密码(如果请求,则已加密)。
标识消息为门户挂起指示符。请注意,这仅在达到 Execute 消息的行计数限制时才会出现。
消息内容(包括自身)的长度(以字节为单位)。
标识消息为简单查询。
消息内容(包括自身)的长度(以字节为单位)。
查询字符串本身。
标识消息类型。当后端准备好进行新的查询周期时,会发送 ReadyForQuery。
消息内容(包括自身)的长度(以字节为单位)。
当前后端事务状态指示器。可能的值为:'I
' 如果为空闲状态(不在事务块中);'T
' 如果在事务块中;或 'E
' 如果在失败的事务块中(查询将被拒绝,直到块结束)。
标识消息为行描述。
消息内容(包括自身)的长度(以字节为单位)。
指定一行中的字段数量(可以为零)。
然后,对于每个字段,都有以下内容
字段名称。
如果该字段可以标识为特定表的列,则为该表的对象 ID;否则为零。
如果该字段可以标识为特定表的列,则为该列的属性编号;否则为零。
字段数据类型的对象 ID。
数据类型大小(请参阅 pg_type.typlen
)。请注意,负值表示可变宽度类型。
类型修饰符(请参阅 pg_attribute.atttypmod
)。修饰符的含义是类型特定的。
用于该字段的格式代码。目前将为零(文本)或一(二进制)。在从 Describe 语句变体返回的 RowDescription 中,格式代码尚不清楚,将始终为零。
标识消息为初始 SASL 响应。请注意,这也用于 GSSAPI、SSPI 和密码响应消息。确切的消息类型从上下文中推断。
消息内容(包括自身)的长度(以字节为单位)。
客户端选择的 SASL 身份验证机制的名称。
接下来 SASL 机制特定的“初始客户端响应”的长度,如果不存在初始响应则为 -1。
n
SASL 机制特定的“初始响应”。
标识消息为 SASL 响应。请注意,这也用于 GSSAPI、SSPI 和密码响应消息。确切的消息类型可以从上下文中推断。
消息内容(包括自身)的长度(以字节为单位)。
n
SASL 机制特定的消息数据。
消息内容(包括自身)的长度(以字节为单位)。
此SSL请求代码。该值被选择为在最高有效 16 位中包含 1234
,在最低有效 16 位中包含 5679
。(为避免混淆,此代码必须与任何协议版本号不同。)
消息内容(包括自身)的长度(以字节为单位)。
协议版本号。最高有效 16 位是主版本号(此处描述的协议为 3)。最低有效 16 位是次版本号(此处描述的协议为 0)。
协议版本号之后是一个或多个参数名称和值字符串对。最后一个名称/值对之后需要一个零字节作为终止符。参数可以以任何顺序出现。user
是必需的,其他是可选的。每个参数指定为
参数名称。目前可识别的名称有
user
要连接的数据库用户名。必需;没有默认值。
database
要连接的数据库。默认为用户名。
options
后端的命令行参数。(不推荐使用此方法,建议设置单独的运行时参数。)此字符串中的空格被视为分隔参数,除非使用反斜杠 (\
) 转义;写入 \\
表示字面反斜杠。
replication
用于以流复制模式连接,其中可以发出少量复制命令而不是 SQL 语句。值可以是 true
、false
或 database
,默认值为 false
。有关详细信息,请参阅 第 53.4 节。
除了上述内容外,还可以列出其他参数。以 _pq_.
开头的参数名称保留用于协议扩展,而其他参数被视为在后端启动时设置的运行时参数。这些设置将在后端启动期间应用(在解析命令行参数之后,如果有的话),并将作为会话默认值。
参数值。
标识消息为 Sync 命令。
消息内容(包括自身)的长度(以字节为单位)。
标识消息为终止。
消息内容(包括自身)的长度(以字节为单位)。
如果您在文档中发现任何不正确、与您特定功能的使用体验不符或需要进一步澄清的内容,请使用此表单报告文档问题。