Задать вопрос
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)
  • Вопрос задан
  • 10209 просмотров
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Пригласить эксперта
Ответы на вопрос 2
@RedHog
Побуду некропостером
Судя по всему вам надо создать индекс как описано здесь - https://stackoverflow.com/questions/36075918/postg...

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

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽