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)
  • Вопрос задан
  • 9581 просмотр
Пригласить эксперта
Ответы на вопрос 2
@RedHog
Побуду некропостером
Судя по всему вам надо создать индекс как описано здесь - https://stackoverflow.com/questions/36075918/postg...

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

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

Войти через центр авторизации
Похожие вопросы
Ведисофт Екатеринбург
от 25 000 ₽
YCLIENTS Москва
от 200 000 до 350 000 ₽
Бюро Цифровых Технологий Санкт-Петербург
от 120 000 до 180 000 ₽
04 мая 2024, в 23:17
1200 руб./в час
04 мая 2024, в 22:32
2000 руб./за проект
04 мая 2024, в 22:10
2001 руб./за проект