Create temporary function

Started by Steve Crawfordalmost 18 years ago3 messagesgeneral
Jump to latest
#1Steve Crawford
scrawford@pinpointresearch.com

I have recently run across situations that might benefit from the
ability to create a temporary function.

One situation is where periodic processing would benefit from
server-side functions but the processing is run rarely (say monthly or
annually) and the requirements for the function may change. This is
relatively easily handled by a CREATE OR REPLACE..run..DROP FUNCTION but
CREATE TEMPORARY FUNCTION would be cleaner.

The other is where it would be nice for a client to see an isolated
individual copy of a function.

For me both of the above are minor nice-to-haves. I have no idea how
difficult this would be to implement but in the spirit of brainstorming,
I thought I'd throw it out to see if anyone else thinks it is a useful
concept.

Cheers,
Steve

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Steve Crawford (#1)
Re: Create temporary function

Steve Crawford <scrawford@pinpointresearch.com> writes:

I have recently run across situations that might benefit from the
ability to create a temporary function.

You can do that today, as long as you don't mind schema-qualifying
uses of the function:

regression=# create function pg_temp.tfunc(int) returns int as
regression-# $$ select $1 + 1 $$ language sql;
CREATE FUNCTION
regression=# select pg_temp.tfunc(42);
tfunc
-------
43
(1 row)

Without the qualification, the function won't be found, even if
you put pg_temp into your search path explicitly. That's intentional
because of the risk of trojan horses ...

regards, tom lane

#3Steve Crawford
scrawford@pinpointresearch.com
In reply to: Tom Lane (#2)
Re: Create temporary function

Tom Lane wrote:

Steve Crawford <scrawford@pinpointresearch.com> writes:

I have recently run across situations that might benefit from the
ability to create a temporary function.

You can do that today, as long as you don't mind schema-qualifying
uses of the function:

regression=# create function pg_temp.tfunc(int) returns int as
regression-# $$ select $1 + 1 $$ language sql;

Excellent. I've submitted this as a comment to the docs for the next
time someone googles "CREATE TEMPORARY FUNCTION".

Cheers,
Steve