row_to_json query postgres json_agg example ejemplo array_to_json sql json database postgresql postgresql-9.3

query - row_to_json postgresql example



postgresql usando el sub-elemento json en la cláusula where (2)

Esta podría ser una pregunta muy básica, pero no puedo encontrar nada en línea.

Si creo una tabla de muestra:

create table dummy ( id int not null, data json );

Luego, si consulta la tabla utilizando la siguiente consulta:

select * from dummy where data->''x'' = 10;

Ahora, como no hay registros en la tabla todavía y no hay ninguna propiedad tal como ''x'' en ningún registro, debería devolver cero resultados.

Pero me sale el siguiente error:

postgres=# select * from dummy where data->''x'' = 10; ERROR: operator does not exist: json = integer LINE 1: select * from dummy where data->''x'' = 10;

Sin embargo, la siguiente consulta funciona:

select * from dummy where cast(data->>''x'' as integer) = 10;

¿Me estoy perdiendo algo aquí o el encasillado es la única forma en que puedo obtener un valor entero de un campo json? Si ese es el caso, ¿no afecta el rendimiento cuando los datos se vuelven extremadamente grandes?


¿Me estoy perdiendo algo aquí o el encasillado es la única manera de obtener un valor entero de un campo json?

Estás en lo correcto, la conversión de tipos es la única forma de leer un valor entero de un campo json.

Si ese es el caso, ¿no afecta el rendimiento cuando los datos se vuelven extremadamente grandes?

Postgres le permite indexar funciones, incluidas las conversiones, por lo que el siguiente índice le permitirá recuperar rápidamente todas las filas donde los datos - >> x tiene algún valor entero

CREATE INDEX dummy_x_idx ON dummy(cast("data"->>''x'' AS int))