Thanks, Tom. I'll take your « aspects of… plpgsql [are simply] implementation artifacts » to mean that my hope to understand what is checked at "create or replace <my subprogram>" time and what is checked first at runtime is futile. There does seem to be a general rule. But, as my example shows, there are exceptions to the rule. And it's impossible to make a simple user-facing statement of what determines "exceptional" status. I suppose that the conclusion is clear: you can't be sure that a subprogram is good until every single code path (in the basic block coverage sense of this) has been tested. But, anyway, it was ever thus. (Error-free compilation never did guarantee error-free runtime outcomes.) I'll call this "case closed" then. |