PostgreSQL 9.4:将jsonb int数组展开为带有行号的表

3
尝试掌握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)

假设数组的长度可以是任意值(除了0),而 'name3' 肯定存在。

2个回答

1
你可以使用 json_array_elements 来展开从 column1->'name3' 中得到的 json数组
SELECT 'name3' ,json_array_elements(column1->'name3')
FROM table1;

结果

(‘name3’, int1)
(‘name3’, int2)
(‘name3’, int3)

1
这适用于json,但不适用于jsonb。应该是SELECT 'name3',json_array_elements((column1-> 'name3') :: json)FROM table1; - Neil
它也不会获取数组的行数。 - Neil

1
这似乎解决了问题(感谢Bruno),但它看起来比必要的代码更多?
WITH x AS (SELECT 'name3' as aname, jsonb_array_elements(column1->'name3') AS some_value FROM table1)
SELECT x.*, row_number() OVER () FROM x;

有更好的解决方案吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接