On Fri, Feb 02, 2018 at 04:07:28PM +0900, Michael Paquier wrote: > You need to read that as "only a SubPlan can be executed after a SubLink > has been processed by the planner", so please replace the last "latter" > by "planner".
(I forgot to add Peter and Andrew in CC: previously, so done now.)
e4128ee7 is making is clear that SubLink are authorized when transforming it in transformSubLink(), however I cannot think about a use case so should we just forbid them, and this is actually untested. So the patch attached does so.
The second problem involves a cache lookup failure for a type when trying to use pg_get_functiondef on a procedure. Luckily, it is possible to make the difference between a procedure and a function by checking if prorettype is InvalidOid or not. There is room for a new patch which supports pg_get_proceduredef() to generate the definition of a procedure, with perhaps a dedicated psql shortcut, but that could always be done later on.
Blocking subqueries in CALL parameters is possible solution. But blocking func def for procedures without any substitution doesn't look correct for me.