Bug # 16519 [1] is another report of confusion regarding trying to use parameters in improper locations - specifically the SET ROLE command within pl/pgsql. I'm re-attaching the doc patch and am adding it to the commitfest.
I checked this patch, and I think so it is correct - my comments are just about enhancing by some examples
Thank you for the review.
v2 attached.
I added examples in the two places you noted.
Upon re-reading, I decided that opening up the section by including everything then fitting in parameters with an exception for utility commands (without previously/otherwise identifying them) forced some undesirable verbosity. Instead, I opened up with the utility commands as the main body of non-result returning commands and then moved onto delete/insert/update non-returning cases when the subsequent paragraph regarding parameters can then refer to the second class (by way of excluding the first class). This seems to flow better, IMO.
I have no objections, but maybe these pages are a little bit unclear generally, because the core of the problem is not described.
Personally I miss a description of the reason why variables cannot be used - the description "variables cannot be used in statements without result" is true, but it is not core information.
The important fact is usage of an execution plan or not. The statements with an execution plan can be parametrized (DML - INSERT, UPDATE, DELETE), and SELECT. The statements without execution plans should not be parametrized. The only execution via execution plan executor allows parametrization. DDL statements are executed via utility execution, and their parameterization is not supported.