Thread: Passing table names to PL/PGSQL for SELECT/UPDATE/INSERT

Passing table names to PL/PGSQL for SELECT/UPDATE/INSERT

From
Gerald Gutierrez
Date:
I've written my Dijkstra's algorithm in PL/PGSQL. It didn't turn out to be 
a big deal at all actually, programming-wise. I understand execution speed 
will be poor but it shouldn't be any slower than having something else, 
like PHP or Java, execute logic and query the database.

I'd like to generalize my function. As per Richard Huxton's suggestion to 
create tables named after session ID (thanks Richard)s, I'd like to pass in 
some table names so that the algorithm can read from and write into tables 
that I specify as parameters to the function. Sometihng like:

select dijkstra(inputtablename, outputtablename);

I've tried typing the parameters as TEXT, and then just inserting $1 in the 
select (e.g. SELECT * from $1 ...) This doesn't work, nor did a number of 
other ways I tried.

How can this be done?



Re: Passing table names to PL/PGSQL for SELECT/UPDATE/INSERT

From
Gerald Gutierrez
Date:
I've found the discussion to which you have referred:

http://www.postgresql.org/mhonarc/pgsql-sql/2001-02/msg00157.html

but was unable to find the documentation for the EXECUTE command. From the 
discussion it seemed to me that doing an "INSERT" into a table of variable 
name cannot be done now. It is unfortunate, but I guess nothing can be done 
about it now.


At 04:40 PM 3/4/2001 -0800, you wrote:
>Mr. Gutierrez:
>
>         The EXECUTE command is what you need.  Please see the development
>documentation, and the list archives for January-Early Feb.
>
>                                         -Josh Berkus



Re: Passing table names to PL/PGSQL for SELECT/UPDATE/INSERT

From
Richard Huxton
Date:
Gerald Gutierrez wrote:
> 
> I'd like to generalize my function. As per Richard Huxton's suggestion to
> create tables named after session ID (thanks Richard)s, I'd like to pass in
> some table names so that the algorithm can read from and write into tables
> that I specify as parameters to the function. Sometihng like:

Known limitation - sorry, should have made things clear.

> select dijkstra(inputtablename, outputtablename);
> 
> I've tried typing the parameters as TEXT, and then just inserting $1 in the
> select (e.g. SELECT * from $1 ...) This doesn't work, nor did a number of
> other ways I tried.

Basically, I can think of 3 solutions. Bear in mind it's late here, I've
had a few drinks with dinner.

1. Use the EXECUTE statement in 7.1 to run the query
2. Use the EXECUTE statement to construct a custom function, one for
each session with the table hard-coded (you could also do this from the
application I'd guess)
3. Try pl/Tcl - I _think_ that lets you construct a dynamic query, but I
don't know TCL so can't say (it's supposed to be easy enough but I've
never got round to it).

HTH

- Richard Huxton


Re: Passing table names to PL/PGSQL for SELECT/UPDATE/INSERT

From
Jie Liang
Date:
Unfortunately, PL/PGSQL cannot pass table name.
I have same problem, only thing I can do is pass an integer, then use IF
.. THEN .. ELSE .. END IF;


Jie LIANG

St. Bernard Software

10350 Science Center Drive
Suite 100, San Diego, CA 92121
Office:(858)320-4873

jliang@ipinc.com
www.stbernard.com
www.ipinc.com

On Sat, 3 Mar 2001, Gerald Gutierrez wrote:

> 
> I've written my Dijkstra's algorithm in PL/PGSQL. It didn't turn out to be 
> a big deal at all actually, programming-wise. I understand execution speed 
> will be poor but it shouldn't be any slower than having something else, 
> like PHP or Java, execute logic and query the database.
> 
> I'd like to generalize my function. As per Richard Huxton's suggestion to 
> create tables named after session ID (thanks Richard)s, I'd like to pass in 
> some table names so that the algorithm can read from and write into tables 
> that I specify as parameters to the function. Sometihng like:
> 
> select dijkstra(inputtablename, outputtablename);
> 
> I've tried typing the parameters as TEXT, and then just inserting $1 in the 
> select (e.g. SELECT * from $1 ...) This doesn't work, nor did a number of 
> other ways I tried.
> 
> How can this be done?
> 
> 
> ---------------------------(end of broadcast)---------------------------
> TIP 2: you can get off all lists at once with the unregister command
>     (send "unregister YourEmailAddressHere" to majordomo@postgresql.org)
>