json_populate_recordset - Consultas JSON anidadas PostgreSQL
postgresql jsonb example (1)
En PostgreSQL 9.3.4, tengo una columna de tipo JSON llamada "persona" y los datos almacenados están en el formato {dogs: [{breed: <>, name: <>}, {breed: <>, name: <>}]}
. Quiero recuperar la raza de perro en el índice 0. Aquí están las dos consultas que ejecuté:
No funciona
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.
Trabajos
select (person->''dogs''->>0)::json->''breed'' from es_config_app_solutiondraft where id = 77;
?column?
-----------
"westie"
(1 row)
¿Por qué es necesario el tipo de fundición? ¿No es ineficiente? ¿Estoy haciendo algo mal o es necesario para el soporte de JSON postgres?
Esto se debe a que operator ->>
obtiene el elemento de matriz JSON como texto. Necesitas un elenco para convertir su resultado de nuevo a JSON.
Puede eliminar esta conversión redundante utilizando operator ->
:
select person->''dogs''->0->''breed'' from people where id = 77;