Используя Postgres 9.4, я хочу создать индекс в столбце json, который будет использоваться при поиске по определенным клавишам в столбце.
Например, у меня есть таблица "farm" с json-столбцом "животные".
В столбце "Животные" есть json-объекты общего формата:
'{"cow": 2, "chicken": 11, "horse": 3}'
Я пробовал несколько индексов (отдельно):
(1) create INDEX animal_index ON farm ((animal ->> 'cow'));
(2) create INDEX animal_index ON farm using gin ((animal ->> 'cow'));
(3) create INDEX animal_index ON farm using gist ((animal ->> 'cow'));
Я хочу запускать запросы вроде:
SELECT * FROM farm WHERE (animal ->> 'cow') > 3;
и этот запрос использует индекс.
Когда я запускаю этот запрос:
SELECT * FROM farm WHERE (animal ->> 'cow') is null;
тогда работает индекс (1), но я не могу заставить какой-либо из индексов работать для неравенства.
Возможно ли такой индекс?
Таблица ферм содержит только ~ 5000 ферм, но некоторые из них содержат 100 животных, и запросы просто слишком долго для моего варианта использования. Индекс, подобный этому, является единственным методом, который я могу придумать для ускорения этого запроса, но, возможно, есть и другой вариант.