Standard queries in plpgsql are parsed / planned only once per backend
session, and the plan stores the object ids of the relations used in
the query, not the names. So, when you drop the table, the cached plan
becomes invalid. If your client disconnects / reconnects, then calls
the function, it will be parsed / planned again, and all is well --
that one time.
If you want to execute queries without having plans cached, you need to
make use of the execute command, the technique specified in section
37.6.4 of the postgres manual:
http://www.postgresql.org/docs/7.4/static/plpgsql-statements.html
But, as Tom said, you can probably rephrase the function to not use a
temp table anymore.
----
James Robinson
Socialserve.com