Я использую Postgres 9.6, и у меня есть следующие две таблицы:
create table employees (
id text,
setting_id text -- references settings.id
);
create table settings (
id text,
setting_str text -- contains json string
);
insert into employees (id, setting_id) values ('e1', 's1');
insert into employees (id, setting_id) values ('e2', 's2');
insert into settings (id, setting_str)
values ('s1', '{"vehicles" : null}');
insert into settings (id, setting_str)
values ('s2', '{"vehicles" : ["Car", "Bike"]}');
Теперь я хочу получить вывод вида:
employee_id, name, vehicles
e1, one, null
e2, two, {"Car", "Bike"}
Я попытался выполнить следующий запрос:
select e.id,
jsonb_array_elements_text(s.setting_str::jsonb #> '{vehicles}')
from employees e
join settings s on s.id = e.setting_id;
Но это дает мне ошибку:
ERROR: cannot extract elements from a scalar
Любая идея, как я могу извлечь массив JSON из текстового поля и отобразить его как массив строк Postgres (неjson
массив, а не text
) в операторе выбора?