在我的postgresql数据库中,我有以下查询
select json_field from my_table where role='addresses_line';
返回
{"alpha": ["10001"], "beta": ["10002"], "gamma": ["10003"]}
其中CCD_ 1是JSONB类型。
我正在寻找一种方法来查询这个json字段中的所有键和所有值,从而输出将是
key | value
----------------
alpha | 10001
beta | 10002
gamma | 10003
有办法做到吗?
问题得到解答后的推广
当我写这个问题时,我没有注意到,所以我隐含地要求不仅将jsonb字段的键和值提取为两列的行,而且——假设与该键相关的所有值都是1个元素长的数组——在与每个键相关的值中只选择列表中第一个元素的值
stefanov.fm给出的解决方案就是这样做的。
现在,为了概括答案,如果第一个查询结果是
{"alpha": 10001, "beta": 10002, "gamma": 10003}
则所需的第二个查询是
select key, value
from jsonb_each
(
(select json_field from my_table where role='addresses_line')
);
感谢@stefanov.fm
使用jsonb_each
函数。
select key, (value ->> 0) as value
from jsonb_each
(
(select json_field from my_table where role='addresses_line')
);
这是一幅以文字形式显示您的数据的插图。
select key, (value ->> 0) as value
from jsonb_each('{"alpha": ["10001"], "beta": ["10002"], "gamma": [10003"]}');
键 | |
---|---|
β | 10002 |
阿尔法 | 1001 |
伽玛 | 10003 |