PostgreSQL 9.4将jsonb int数组扩展为包含行号的表

时间:2014-11-01 18:36:12

标签: arrays postgresql row-number postgresql-9.4 jsonb

尝试将我的头部包裹在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'保证存在。

2 个答案:

答案 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;

任何人都有更好的解决方案吗?