PostgreSQL 9.4将jsonb int数组展开成带有行号的表格
问题描述:
试图将我的头部围绕postgresql 9.4 jsonb,并希望找出如何执行以下操作的一些帮助。PostgreSQL 9.4将jsonb int数组展开成带有行号的表格
考虑下面的例子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'是保证的存在。
答
这似乎是解决问题(感谢布鲁诺)产生的json array
,但看起来比更多的代码应该有必要?
WITH x AS (SELECT 'name3' as aname, jsonb_array_elements(column1->'name3') AS some_value FROM table1)
SELECT x.*, row_number() OVER() FROM x;
任何人都有更好的解决方案吗?
答
您可以使用json_array_elements到UNNEST从column1->'name3'
SELECT 'name3' ,json_array_elements(column1->'name3')
FROM table1;
结果
(‘name3’, int1)
(‘name3’, int2)
(‘name3’, int3)
这适用于json,但不适用于jsonb。它应该是SELECT'name3',json_array_elements((column1 - >'name3'):: json)FROM table1; – Neil 2014-11-02 14:46:30
它也没有得到数组的行号。 – Neil 2014-11-02 14:52:51