В PostgreSQL 9.3 Beta 2 (?) Как мне создать индекс для поля JSON? Я попробовал это с помощью ->
оператора, hstore
но получил следующую ошибку:
CREATE TABLE publishers(id INT, info JSON);
CREATE INDEX ON publishers((info->'name'));
ОШИБКА: тип данных json не имеет класса оператора по умолчанию для метода доступа «btree». СОВЕТ: необходимо указать класс оператора для индекса или определить класс оператора по умолчанию для типа данных.
Ответы:
Нашел:
Как указано в комментариях, тонкая разница здесь
->>
вместо->
. Первый возвращает значение в виде текста, второй - как объект JSON.источник
->>
вместо->
. Первый возвращает значение в виде текста, второй возвращает объект JSON.TEXT
бы. Если вы хотите сделать целые сравнения вместо сравнения строк, вы должны добавить бросок:((info->>'name')::INT)
.create index idx_name on table_name ((json_column->'child_obj'->>'child_obj_field'));
Нам сначала нужно использовать,->
чтобы получить объект JSON, а затем->>
получить значение дочернего объекта как текст.