2014-11-01 2 views
3

Попытка обернуть мою голову вокруг postgresql 9.4 jsonb и хотела бы помочь выяснить, как это сделать.PostgreSQL 9.4 expand jsonb int array в таблицу с номерами строк

Учитывая следующий пример 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' является гарантией чтобы существовать.

ответ

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; 

У кого-нибудь есть лучшее решение?

1

Вы можете использовать json_array_elements для unnest в json array, которая является результатом 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

+0

Он также не получает номера строк массива. – Neil

 Смежные вопросы

  • Нет связанных вопросов^_^