Не по кэшу а по сохраненному плану. Разницу чувствуете?
Да, но я так понимаю, что план в моём случае прост - вызов функции. Но это ведь тоже план, что мешает в нём заинлайнить результат вызова с теми же параметрами?
Я понимаю, что "может" не значит "будет". Но вопрос как раз про "будет". Когда, при каких условиях это произойдёт, как их воспроизвести.
Да, но я так понимаю, что план в моём случае прост - вызов функции. Но это ведь тоже план, что мешает в нём заинлайнить результат вызова с теми же параметрами?
Я понимаю, что "может" не значит "будет". Но вопрос как раз про "будет". Когда, при каких условиях это произойдёт, как их воспроизвести.
Посмотрите в каких случаях постгрес может сохранить план
immutable появляется в 7.3. До этого он назывался isCachable. Про isCachable в 7.2 сказано:
Iscachable indicates that the function always returns the same result when given the same argument values (i.e., it does not do database lookups or otherwise use information not directly present in its parameter list). The optimizer uses iscachable to know whether it is safe to pre-evaluate a call of the function.
immutable появляется в 7.3. До этого он назывался isCachable. Про isCachable в 7.2 сказано:
Iscachable indicates that the function always returns the same result when given the same argument values (i.e., it does not do database lookups or otherwise use information not directly present in its parameter list). The optimizer uses iscachable to know whether it is safe to pre-evaluate a call of the function.
Да, так удалось воспроизвести использование предвычисленного значения функции. Но, действительно, это происходит только при использовании prepared-запросов и в плане действительно должны быть константные значения. Например, так сработает:
PREPARE cc1 AS select check_cache('11e235aa-0a5a-475f-9173-2929ca5e5fcf');