row_to_json json_populate_recordset example ejemplo json postgresql psql postgresql-9.3

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;