scalar plpgsql functions and their stability flags

Started by Victor Dobrovolskyalmost 2 years ago2 messagesgeneral
Jump to latest
#1Victor Dobrovolsky
booby.stager@gmail.com

Good day experts...

Question on scalar plpgsql functions stability flags (immutable, stable)
regarding how it works in sql queries.

It is clear that for immutable/stable functions with constant parameters,
query planner could/should calculate value in a parse time and use it
directly in query, or at least once per query.

But it is unclear for me what exactly should/can happens when parameters
are bounded not to constant values but to query fields.
In such a case there could be some caching mechanics involved for
parameters combinations and result values.
Like building a hash table for that or something similar.

Can someone give me guidance on this matter.
What limits the usefulness of such a mechanism, if it exists.

Thank you.

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Victor Dobrovolsky (#1)
Re: scalar plpgsql functions and their stability flags

Victor Dobrovolsky <booby.stager@gmail.com> writes:

It is clear that for immutable/stable functions with constant parameters,
query planner could/should calculate value in a parse time and use it
directly in query, or at least once per query.

Immutable, yes, stable, no.

Awhile back there was a draft patch to cache outputs of stable functions
after running them once in a query, but I don't think anyone's still
working on that. IIRC we were having a hard time convincing ourselves
that the extra bookkeeping would pay for itself.

But it is unclear for me what exactly should/can happens when parameters
are bounded not to constant values but to query fields.
In such a case there could be some caching mechanics involved for
parameters combinations and result values.
Like building a hash table for that or something similar.

No such mechanism exists. Again, there would be a lot of tradeoffs
involved and it's difficult to say if it'd be a win.

regards, tom lane