尝试将我的头部包裹在postgresql 9.4 jsonb周围,并希望了解如何执行以下操作。
给出以下示例jsonb:
‘{“name1” : value1, “name2” : value2, “name3” : [int1, int2, int3] }’::jsonb AS table1.column1
通缉:仅返回“name3”数组,作为返回签名为
的表TABLE( var_name varchar, var_value int, var_row_num int)
因此结果数据如下所示:
(‘name3’, int1, 1)
(‘name3’, int2, 2)
(‘name3’, int3, 3)
假设数组可以是除零之外的任何长度,并且'name3'保证存在。
答案 0 :(得分:1)
您可以使用json_array_elements取消json array
column1->'name3'
SELECT 'name3' ,json_array_elements(column1->'name3')
FROM table1;
结果
(‘name3’, int1)
(‘name3’, int2)
(‘name3’, int3)
答案 1 :(得分:1)
这似乎解决了这个问题(谢谢,布鲁诺),但似乎更多的代码应该是必要的?
WITH x AS (SELECT 'name3' as aname, jsonb_array_elements(column1->'name3') AS some_value FROM table1)
SELECT x.*, row_number() OVER () FROM x;
任何人都有更好的解决方案吗?