PostgreSQL: преобразование JSONB в столбцы - PullRequest
0 голосов
/ 25 октября 2019

Имея проблему с преобразованием jsonb в нужный тип таблицы, любая помощь будет оценена.

Мой jsonb равен

{"instances": [{"code": "12345"}, {"code": "6789"}, {"code": "54321"}]

Я хочу преобразовать его в:

code1      code2     code3
12345      6789      54321

Заранее спасибо!

1 Ответ

0 голосов
/ 25 октября 2019

Одним из ограничений SQL является то, что количество столбцов (и их типы данных) запроса должно быть известно базе данных до того, как запрос будет выполнен. Таким образом, невозможно получить динамический запрос, который возвращает 3 столбца сегодня и 42 завтра.

Если у вас есть статическое число элементов массива (или, по крайней мере, верхний предел), вы можете использовать следующее:

select the_column -> 'instances' -> 0 ->> 'code' as code_1, 
       the_column -> 'instances' -> 1 ->> 'code' as code_2, 
       the_column -> 'instances' -> 2 ->> 'code' as code_3
from the_table;

, вы можете упростить этот бит, используя производную таблицу:

select inst -> 0 ->> 'code' as code_1, 
       inst -> 1 ->> 'code' as code_2, 
       inst -> 2 ->> 'code' as code_3
from (
  select the_column -> 'instances' as inst
  from the_table
) t
...