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) 
+1

这适用于json,但不适用于jsonb。它应该是SELECT'name3',json_array_elements((column1 - >'name3'):: json)FROM table1; – Neil 2014-11-02 14:46:30

+0

它也没有得到数组的行号。 – Neil 2014-11-02 14:52:51