I wrote: > I'm going to go see about converting this to just call > expand_function_arguments and then drop all the special-case code.
So while looking at that ... isn't the behavior for non-writable output parameters basically insane? It certainly fails to accord with the plpgsql documentation, which shows an example that would throw an error: CREATE PROCEDURE triple(INOUT x int) ... CALL triple(5); It's even weirder that you can get away with not supplying a writable target value for an output argument so long as it has a default. I think the behavior here ought to be "if the actual argument is a plpgsql variable, assign the output back to it, otherwise do nothing". That's much closer to the behavior of OUT arguments in other old-school programming languages. regards, tom lane