PostgreSQL Вложенный запрос JSON
В PostgreSQL 9.3.4 у меня есть столбец типа JSON с именем "person", а хранящиеся в нем данные находятся в формате {dogs: [{breed: <>, name: <>}, {breed: <>, name: <>}]}
. Я хочу получить породу собаки в индексе 0. Вот два запроса, которые я выполнил:
Не работает
db=> select person->'dogs'->>0->'breed' from people where id = 77;
ERROR: operator does not exist: text -> unknown
LINE 1: select person->'dogs'->>0->'bree...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
Работы
select (person->'dogs'->>0)::json->'breed' from es_config_app_solutiondraft where id = 77;
?column?
-----------
"westie"
(1 row)
Почему требуется литация типа? Разве это неэффективно? Я делаю что-то неправильно или это необходимо для поддержки Postgres JSON?
Ответы
Ответ 1
Это потому, что оператор ->>
получает элемент массива JSON как текст. Для преобразования своего результата в JSON вам понадобится бросок.
Вы можете устранить этот избыточный листинг, используя оператор ->
:
select person->'dogs'->0->'breed' from people where id = 77;