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;