如何使用 Azure Data Studio 将转义字符串转换为 postgresql 中的 bytea(\ 不是二进制数字)

How can I convert an escaped string to a bytea in postgresql (\ is not a binary digit) with Azure Data Studio

这可能是重复的,但我在相当长一段时间后一直无法真正找到如何做到这一点。

我想做的只是往返一个二进制值。我 select 它,然后将其粘贴到另一个 SQL 查询中。

id  data
58  b'\xaa\xb6\x87|-x\xf6\xd1\x80\xec\xd2\xed\x91\x1ebd\x924g\xcd\xaeVZ\x01\xf2\xa0\xb3\xd8\x16\xe1fC'

现在我正在尝试进行第二个查询,计算与那个匹配的事物。

select count(*) from mytable where data = b'\xaa\xb6\x87|-x\xf6\xd1\x80\xec\xd2\xed\x91\x1ebd\x924g\xcd\xaeVZ\x01\xf2\xa0\xb3\xd8\x16\xe1fC'

我收到错误消息 “\”不是有效的二进制数字

我发现的大多数文档和其他内容似乎都建议使用 E'...'::bytea 语法,所以我这样做:

select count(*) from mytable where data = E'\xaa\xb6\x87|-x\xf6\xd1\x80\xec\xd2\xed\x91\x1ebd\x924g\xcd\xaeVZ\x01\xf2\xa0\xb3\xd8\x16\xe1fC'::bytea

我收到错误消息 编码字节序列无效 "UTF8": 0xaa

我已经尝试了 decode 功能,因为其他建议:

select count(*) from mytable where data = decode('\xaa\xb6\x87|-x\xf6\xd1\x80\xec\xd2\xed\x91\x1ebd\x924g\xcd\xaeVZ\x01\xf2\xa0\xb3\xd8\x16\xe1fC', 'escape')

失败并显示错误 invalid input syntax for type bytea

为什么二进制数据的输出格式不是有效的输入格式? 希望这不仅仅是 Azure Data Studio 很奇怪:-(

decode() 中使用十六进制值时,您需要使用 hex 选项并仅提供有效的十六进制数字:

decode('aab687', 'hex')

或者,您可以在十六进制值前面加上 single \x,例如

'\xaab687'::bytea

但是您的字符串包含无效的十六进制值,例如\x1ebd\x924g\x87|-x - 不确定应该是什么。

"escape" 语法(例如使用 E'...')需要 octal values,而不是十六进制数,因此 E'\xaa\xb6... 应该是 E'\252\266...。对 decode()

使用 'escape' 选项时也是如此

事实证明这是 Azure Data studio 的行为,而不是 postgresql 特有的行为。

当我 运行 使用 psql 相同的查询时,我得到一个合理格式化的十六进制字符串,它在往返查询中工作正常,看起来像 \xbc6b702a12f8adb482ad517eca5af6407c9f172091242aa79845a17b4d479e2d(注意不同的数据值,但格式正确)

我针对 Azure Data Studio 的 postgresql 插件提交了一个问题,希望它可以通过这种方式得到解决。

问题Link:https://github.com/microsoft/azuredatastudio-postgresql/issues/204

作为解决方法,我需要在所有查询中使用 select encode(column, 'hex')