к литералам на этапе построения плана, в отличие от функций - это сознательное решение разработчиков? Просто, на мой дилетантский взгляд, вручную созданные операторы - это синтаксический сахар к соответствующим функциям и, казалось бы, их использование не должно отличаться от использования функций. Но планировщик считает иначе и предвычисляет выражения с операторами.
https://dbfiddle.uk/?rdbms=postgres_13&fiddle=72e593819901aca89ab39a70fb0bddc6
upd.. немного наврал. Если заменить на вручную созданную immutable функцию, которая делает тоже самое, то она тоже предвычисляется. И уже это странно, получается что nullif чем-то хуже.
https://dbfiddle.uk/?rdbms=postgres_13&fiddle=97e116d9d37ede0d45fe77ba06f25b29
Да, получается так (я не смотрел, почему). И это так уже очень давно, видимо (в 9.5 — то же самое). Нелогично как-то — может, Вам стоит написать в -hackers по этому поводу?
Обсуждают сегодня