Peter wrote: > Given an arbitrary function fn(x) returning numeric. > > Question: how often is the function executed? > [...] > C. > select v.v,v.v from (select fn('const') as v) as v; > > Answer: > Once if declared VOLATILE. > Twice if declared STABLE. > > Now this IS a surprize. It is clear that the system is not allowed to > execute the function twice when declared VOLATILE. It IS ALLOWED to > execute it twice when STABLE - but to what point, except prolonging > execution time? > > Over all, VOLATILE performs better than STABLE. The reason is that the subquery with the VOLATILE function can be flattened; see the EXPLAIN (VERBOSE) output. There is not guarantee that less volatility means better performance. Yours, Laurenz Albe -- Cybertec | https://www.cybertec-postgresql.com