我想用Postgresql将从json列提取的键值对添加到表中。
我有一个带有uid的items_表和一个json格式的数据列,有多对。初始表如下:

uid | data

1   | {"item1":"string1", "item2":"string2"}
2   | {"item2":"string3", "item5":"string1", "item7":"string5"}
3   | {"item1":"string3", "item4":"string1", "item6":"string8", "item5":"string5"}
4   | {"item1":"string4"}

...
因此,某些项/字符串可以重复,字段长度也可以变化。
我尝试应用文档中提到的jsonb_object_键,但是出现了一个错误。
     select jsonb_object_keys(data)
     from items_table;

错误:函数JSONBYObjutsKyKEY(字符更改)不存在提示:没有函数与给定名称和参数类型匹配。您可能需要添加显式类型转换。
我希望通过以下方式获得一个表结果,以便按项和字符串进行拆分,展开uid列:
uid | items      | strings

1   | item1      | string1
1   | item2      | string2
2   | item2      | string3
2   | item5      | string1
2   | item7      | string5
3   | item1      | string3
3   | item4      | string1
3   | item6      | string8
3   | item5      | string5
4   | item1      | string4

如何才能实现上述产出?

最佳答案

您可以使用json_each_text()方法将jsonb类型列轻松拆分为两个单独的列:

select uid, (js).key as items, (js).value as strings
  from
  (
   select uid, jsonb_each_text(data) as js
     from tab
  ) q

Demo

07-27 14:07