在 Postgres JSONB 列中意外存储字符串而不是对象

Accidentally stored string instead of object in Postgres JSONB column

我刚刚意识到插入到 JSONB 列的数据是像 "{\"foo\": 3}" 这样的字符串,而不是像 {"foo": 3} 这样的对象。我很确定原因是由于将 SQLAlchemy 模型的字段设置为

reading.blob = blob_json

而不是

reading.blob = json.loads(blob_json)

不过,我还没有找到更正现有数据的方法。 Postgres 文档给出了将文本转换为 JSON、从 JSON 中提取数组和对象元素等示例,但我找不到任何说明如何 select 的文本的内容JSONB 列只有一个字符串值。

尤里卡! #postgres 上的 DeciBull 提出了

SELECT (json_build_array('"{\"Stuff.Hello\": 0, \"Stuff.Hello2\": 1000}"'::jsonb)->>0)::jsonb

{"Stuff.Hello": 0, "Stuff.Hello2": 1000}

是的,就在我得到这个的时候:

SELECT (('"{\"foo\":42}"'::JSONB)->>0)::JSONB;