Как отобразить ключ из массива хэшей в postgres? - PullRequest
1 голос
/ 19 марта 2019

У нас есть стол «Книги»:

id - int
data - text

На самом деле мы должны были хранить данные в виде столбца jsonb, но мы создали эту таблицу давно и не планируем миграцию.

Мы можем привести его к JSONB, как и при необходимости.

Мой вопрос здесь

В данных у меня есть {"genres":[{"text":"Crime","id": "1"},{"text":"Romance","id": "5"}],"name":"Harry Potter"}

Мне нужен запрос на выборку для отображения всего текста жанров, разделенных запятыми для каждой книги.

Как я могу это сделать?

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

select data::json -> 'genres'  as genres
from books
where data::json -> 'genres'  is not NULL
limit 1;

Однако здесь также отображается идентификатор и квадратные скобки.

1 Ответ

2 голосов
/ 19 марта 2019

Использование json_array_elements

select string_agg(j->>'text',',')  from books
cross join lateral json_array_elements(data::json->'genres') as j

Демо

Если вы хотите для каждой книги, добавьте group by id или что-то однозначно идентифицирующее книгу.

...