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