Использование Postgres 9.4, я хочу создать индекс в столбце json, который будет использоваться при поиске по определенным ключам в столбце.PostgreSQL Index on JSON
Например, у меня есть «фермерская» таблица с «животными» json column.
Колонка животных имеет 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 животных и запросы просто слишком долго для моего использования. Индекс, подобный этому, является единственным методом, который я могу придумать для ускорения этого запроса, но, возможно, есть и другой вариант.
Спасибо! Замечательный ответ. Меня интересует только первый уровень. Значение всегда является целым числом. Однако меня интересуют некоторые другие животные. Имеет ли смысл просто копировать этот индекс для каждого интересующего меня животного? – lnhubbell
@lnhubbell: для * известного, статического, тривиального * количества животных это должно быть самым простым и эффективным решением. Однако я бы явно сделал их частичными индексами. См. Добавление выше. –