Hi: We know volatile is very harmful for optimizers and it is the default value (and safest value) if the user doesn't provide that. Asking user to set the value is not a good experience, is it possible to auto-generate the value for it rather than use the volatile directly for user defined function. I think it should be possible, we just need to scan the PlpgSQL_stmt to see if there is a volatile function?
The second question "It is v for “volatile” functions, whose results might change at any time. (Use v also for functions with side-effects, so that calls to them cannot get optimized away.)" I think they are different semantics. One of the results is volatile functions can't be removed by remove_unused_subquery_output even if it doesn't have side effects. for example: select b from (select an_expensive_random(), b from t); Is it by design on purpose? -- Best Regards Andy Fan (https://www.aliyun.com/)