Получение значений из массива объектов jsonb postgresql - PullRequest
0 голосов
/ 02 июля 2018

Я храню некоторые идентификаторы и имена в массиве jsonb объекта, как это

[{"id":"1","name":"abc"},{"id":"2","name":"cde"}]

Мой стол выглядит так

id      userinfo
1       [{"id":"1","name":"abc"},{"id":"2","name":"cde"}]
2       [{"id":"3","name":"fgh"},{"id":"4","name":"ijk"}]    

Я пытаюсь выбрать все записи с идентификатором 1, но я просто хочу получить идентификаторы в объекте userinfo. Мне не нужны имена

Я пробовал это

select distinct userinfo->'name' from table where id = 1

но это дает мне нулевое значение

Это будет работать с этим запросом

select distinct userinfo->0->'name' from table where id = 1

но я не знаю индекса, так как я могу использовать этот запрос, чтобы получить желаемый результат

Спасибо

1 Ответ

0 голосов
/ 02 июля 2018

Вам нужно нормализовать данные, развернув массив, чтобы получить доступ к каждому элементу.

select ui.info ->> 'id' as id,
       ui.info ->> 'name' as name
from the_table t
  cross join lateral jsonb_array_elements(t.userinfo) as ui(info)
 where t.id = 1;

Онлайн пример: http://rextester.com/FCNM11312

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...