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)

假设数组可以是除零以外的任何长度,并且保证“name3”存在。

4

2 回答 2

1

您可以使用json_array_elements取消嵌套json array结果column1->'name3'

SELECT 'name3' ,json_array_elements(column1->'name3')
FROM table1;

结果

(‘name3’, int1)
(‘name3’, int2)
(‘name3’, int3)
于 2014-11-01T19:12:32.123 回答
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;

有人有更好的解决方案吗?

于 2014-11-02T15:11:42.910 回答