Andrew Dunstan <andrew(at)dunslane(dot)net> writes:
> Can anyone suggest why I might be seeing this effect (each notice comes
> out once per row plus once per function call)
It looks like you're executing the whole function body once per physical
call, which is certainly not a good plan for a function returning set.
Once you get to the RETURN statement, you probably want to stash away
the array value and then just return elements of it on successive calls,
without reexecuting any user code.
regards, tom lane