STABLE vs IMMUTABLE - в чём разница? PostgreSQL

Как я понимаю IMMUTABLE и STABLE функции (в концептуальном плане):

  1. Immutable - функции, результаты которой не зависят ни от чего (включая, что важно, настройки БД) кроме входных данных.

Пример: любая функция, совершающая арифметические вычисления

  1. Stable - функция, результаты которой не зависят ни от чего, кроме входных данных на протяжении исполнения текущего запроса.

Пример: функция, под капотом использующая cast "временного" типа данных, поведение которого может зависеть от каких-то настроек на уровне БД (которые могут поменяться от вызова к вызову функции).

Вопросы:

  1. Верно ли описанное выше?
  2. Результат функций обоих видов может переиспользоваться в случае повторного вызова с ранее встречавшимися параметрами. Есть ли между ними какая-то разница в этом контексте?
  3. Я где-то читал, что IMMUTABLE функции как-то упрощают взаимодействие с индексами. Подскажите, как это работает? Это какой-то хак non-sargable поиска?

Ответы (0 шт):