No PostgreSQL 9.3 Beta 2 (?), Como faço para criar um índice em um campo JSON? Tentei usando o ->
operador usado para, hstore
mas obtive o seguinte erro:
CREATE TABLE publishers(id INT, info JSON);
CREATE INDEX ON publishers((info->'name'));
ERRO: o tipo de dados json não tem classe de operador padrão para o método de acesso "btree" DICA: Você deve especificar uma classe de operador para o índice ou definir uma classe de operador padrão para o tipo de dados.
Respostas:
Encontrado:
Conforme declarado nos comentários, a diferença sutil aqui é em
->>
vez de->
. O primeiro retorna o valor como texto, o último como um objeto JSON.fonte
->>
vez de->
. O primeiro retorna o valor como texto, o último retorna um objeto JSON.TEXT
. Se você quer fazer comparações de inteiros em vez de comparações de strings, você tem que adicionar um elenco:((info->>'name')::INT)
.create index idx_name on table_name ((json_column->'child_obj'->>'child_obj_field'));
. Primeiro precisamos usar->
para obter o objeto JSON e, em seguida,->>
obter o valor do objeto filho como texto.