Postgres Wire Protocol NoticeResponse消息与文档不匹配

时间:2019-05-20 04:12:07

标签: postgresql

在RDS实例中使用11.1 postgres服务器从EC2实例中使用postgres版本10.8客户端。

psql(10.8(Ubuntu 10.8-0ubuntu0.18.04.1),服务器11.1)。

根据:    https://www.postgresql.org/docs/9.3/protocol-message-formats.html NoticeResponse消息的格式为:

NoticeResponse(B) Byte1('N')[将消息标识为NoticeResponse消息]

Int32 [消息内容的长度,以字节为单位,包括自身在内]

后跟一系列的1字节字段(表示消息类型),然后是一个以空字符结尾的字符串。然后序列本身将以null终止。

因此,示例消息可能如下所示: 'N'[表示消息长度的4个字节]'S''W''A'R'N'I'N'G'\ 0'C''0''3' '0''0''0'\ 0'M''U''N''H'A'P'P'Y'''Q'U'E'R'' Y'\ 0 \ 0

此处,“ WARNING”之前的“ S”表示严重性类型的消息,“ C”表示SQL状态(在这种情况下为03000),“ UNHAPPY QUERY”之前的“ M”表示主要消息。

我看到的是: 'N'[4字节,指示80字节消息] \ 0 \ 3 \ \ 0 \ 0'u''s''e''r'\ 0'[已编辑的用户名] \ 0'd'a' 't''a''b''a''s''e'\ 0 [已编辑名称] \ 0'a''p''p''l''i''c''a''t' 'i''o''n''_''n''a''m''e'\ 0'p''s''q''l''c''l''i''e' 'n''t''_''e''n''c''o''d''i''n''g'\ 0'U''T''F''8'\ 0 \ 0

(修订内容由我放入其中-实际消息中包含我要连接的用户名和架构名称)。 换句话说,它以键值对的形式出现,以最终的空字符终止,并在开头附近添加了神秘的序列\ 0 \ 3 \ 0 \ 0。

所以这是一个问题: 是否缺少我需要的文件? RDS的服务器版本11.1是否更改了执行有线协议的方式?

编辑:我发现了问题。

'N'实际上是服务器对SSLRequest的响应-表示不支持SSL通信。以下内容来自客户端,指示启动消息,0300为4字节,指示正在选择3.00版线。

由于我正在收听的频道既在收听客户端消息,也在收听服务器消息,所以我对看起来很组合的消息感到困惑。

0 个答案:

没有答案