En PostgreSQL 9.3 Beta 2 (?), ¿Cómo creo un índice en un campo JSON? Lo probé usando el ->
operador utilizado para hstore
pero obtuve el siguiente error:
CREATE TABLE publishers(id INT, info JSON);
CREATE INDEX ON publishers((info->'name'));
ERROR: el tipo de datos json no tiene una clase de operador predeterminada para el método de acceso "btree" SUGERENCIA: Debe especificar una clase de operador para el índice o definir una clase de operador predeterminada para el tipo de datos.
Respuestas:
Encontró:
Como se indica en los comentarios, la sutil diferencia aquí es en
->>
lugar de->
. El primero devuelve el valor como texto, el segundo como un objeto JSON.fuente
->>
lugar de->
. El primero devuelve el valor como texto, el último devuelve un objeto JSON.TEXT
, sin embargo. Si usted quiere hacer comparaciones enteros en lugar de comparaciones de cadenas, hay que añadir un reparto:((info->>'name')::INT)
.create index idx_name on table_name ((json_column->'child_obj'->>'child_obj_field'));
Primero debemos usarlo->
para obtener el objeto JSON y luego->>
para obtener el valor del objeto secundario como texto.