Flaker
@Flaker

Как сделать индекс по JSONB полю в PostgreSQL?

Есть jsonb поле properties.
У некоторых записей в properties есть объект price.
То-есть там лежит такой json объект:
{
    price: {
        id: 222,
        val: 150
    }
}


Хочу ускорить такой SELECT:
SELECT * FROM "TABLE_NAME" WHERE (properties #>> '{price, val}')::int BETWEEN '100' AND'200'


Создаю такой индекс:
CREATE INDEX price_btree_idx ON estates USING btree (((properties -> 'price') -> 'val'))


Изменений не наблюдается, так как судя по всему база считает, что поле val — это текст.

Как правильно сделать такой индекс?

UPD:
Само поле "properties" у меня уже проиндексировано:
CREATE INDEX properties_gin_idx ON estates USING gin (properties jsonb_path_ops)
  • Вопрос задан
  • 9944 просмотра
Пригласить эксперта
Ответы на вопрос 2
@RedHog
Побуду некропостером
Судя по всему вам надо создать индекс как описано здесь - https://stackoverflow.com/questions/36075918/postg...

то есть CREATE INDEX price_btree_idx ON estates ((((properties -> 'price') -> 'val'))::int)
Ответ написан
Комментировать
Demetriy
@Demetriy
веб и мобильная разработка
К сожалению, нету под рукой postgresql, чтобы проверить, но попробуйте сделать функциональный индекс на поле price, думаю должна быть такая возможность.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы