STABLE vs IMMUTABLE - в чём разница? PostgreSQL
Как я понимаю IMMUTABLE и STABLE функции (в концептуальном плане):
- Immutable - функции, результаты которой не зависят ни от чего (включая, что важно, настройки БД) кроме входных данных.
Пример: любая функция, совершающая арифметические вычисления
- Stable - функция, результаты которой не зависят ни от чего, кроме входных данных на протяжении исполнения текущего запроса.
Пример: функция, под капотом использующая cast "временного" типа данных, поведение которого может зависеть от каких-то настроек на уровне БД (которые могут поменяться от вызова к вызову функции).
Вопросы:
- Верно ли описанное выше?
- Результат функций обоих видов может переиспользоваться в случае повторного вызова с ранее встречавшимися параметрами. Есть ли между ними какая-то разница в этом контексте?
- Я где-то читал, что IMMUTABLE функции как-то упрощают взаимодействие с индексами. Подскажите, как это работает? Это какой-то хак non-sargable поиска?