我发现两个不同客户端发出的相同 postgresql 查询的处理方式不同。具体来说,bytea 值的插入方式不同。
演示该行为的查询是这样的:
INSERT INTO "TestTable" ("Input") VALUES (decode('74657374', 'hex'))
74657374 是十六进制的“测试”。在一个客户端中,“测试”被插入到“输入”字段中,无论该字段是 text/varchar 还是 bytea。这就是我想要的行为。在另一个客户端中,'\x74657374' 被插入到“输入”字段中,无论是 text/varchar 还是 bytea。此字符串是 ASCII 'test' 的 bytea 字节的 postgresql 文字表示。但是插入了 sql 文字语法本身。我不希望这种行为。
我使用了一段手写的 SQL,bytea 值只出现在查询“内部”(如果“输入”列的类型为 Text,那么文字和接收列都没有 bytea 类型),在我看来不太可能任一客户端正在解析然后重建查询。因此,似乎差异必须发生在执行查询的服务器上。这意味着必须有一些特定于连接的配置设置正在改变服务器行为。
谁能告诉我哪些连接特定设置可能会改变这种行为?
我知道查询的行为确实不同,这不是显示问题等,因为我可以看到同一个表中的行具有不同的值('test' 和 '\x74657374')。我尝试了各种替代 bytea 处理方法,但它们都受到这个问题的影响。对于那些感兴趣的人,“好”客户端是 pgAdminIII,“坏”客户端是 Ruby PG gem。尽管出于我上面给出的原因,我相信 postgresql 必须有一些内置功能支持这种行为。
我怀疑不同之处在于 a 的外观
bytea
取决于当前的设置bytea_output
:该
text
列实际上包含从bytea
to类型转换的结果text
,这取决于 的当前设置bytea_output
。该
bytea
列包含正确的四个字节,但显示方式不同,具体取决于 的当前设置bytea_output
。