将 Bytea 转换为 Json

Chr*_*ris 6 postgresql

我正在尝试分析 Postgresql 数据库中的数据,该数据库是 Json 文本但存储在 bytea 列中。某些行可以转换,但其他行则不能。投射编码的 bytea 时,文本中没有 CodePoints 的 Json 工作正常

select encode(myByteaColumn, 'escape')::json -> aJsonProperty as myProp from myTable
Run Code Online (Sandbox Code Playgroud)

但是对于某些行,这会失败,因为字符串中有一些编码的代码点,例如德语变音符号(Ä,Ö 等),像这样对 bytea 进行编码时Zuständigkeit会显示Zust\303\244ndigkeit像这样的德语单词

select encode(myByteaColumn, 'escape') from myTable
Run Code Online (Sandbox Code Playgroud)

数据库设置为 UTF-8。

S-M*_*Man 7

演示:db<>小提琴

convert_from() 对我有用:

SELECT convert_from(decode('Zuständigkeit', 'escape'),'UTF8')

SELECT convert_from(decode('{"Zuständigkeit":"ABC"}', 'escape'),'UTF8')::jsonb -> 'Zuständigkeit'
Run Code Online (Sandbox Code Playgroud)

作为旁注,您得到了\303\244,因为根据PostgreSQL 文档中的这一部分,该encode(data bytea, 'escape')函数:

将零字节和高位集字节转换为八进制序列 ( \nnn) 并将反斜杠加倍。