"Feng Chen" <fchen(at)covergence(dot)com> writes:
> The problem is that I should not have to and cannot re-load the
> functions every now and then. Why would the type id change and the
> function still references to the old type id thus fails to get the right
> results?
It's not possible in any modern version of PG to drop the function's
return type without dropping the function too. I suspect the problem
is not with the return type at all, but with some table or other type
referenced within the function body. Currently the only real solution
to that is to use EXECUTE for every SQL command that touches a transient
object, so that plpgsql won't try to cache a plan for the command.
regards, tom lane