выражение с gist/gin индексом, то если оно, например, находится в case стейтменте, то к индексу обращения нет, например:
select ... from ... where foo @> bar - тут индекс для bar работает
select ... from ... where case when baz then true else foo @> bar end - тут не работает
Я же правильно понимаю, что это особенности самих инвертированных индексов? Как "идиоматично" решать подобные проблемы? .-.
если есть воркэраунд, то не страшно)
А что мешает превратить case в комбинацию логических условий?
имеется в ввиду or, and и так далее?
а можно пример?
Предлагаю сделать UNION Одна часть UNION where foo is null, вторая where foo is not null and condition(foo) Планировщик построит отдельный оптимальный план для каждой комбинации параметров. Второй вариант — вместо NULL передать такое значение параметра, для которого можно применить тот же план с индексом, и работает тот план быстро. Идиоматично — не делать так с параметрами.
Спасибо большое) Я обдумаю А как идиоматично?
Обсуждают сегодня