SQL:将jsonb字段的键和值提取为两个独立列的行



在我的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

最新更新