Unix Technical Forum

Re: what are the ways to avoid --- "ERROR: EXECUTE of SELECT ... INTO is not implemented yet"

This is a discussion on Re: what are the ways to avoid --- "ERROR: EXECUTE of SELECT ... INTO is not implemented yet" within the pgsql Bugs forums, part of the PostgreSQL category; --> Here is my real use case 1) We have nornal SELECT ...INTO calls in the procedure calls 2) However ...


Go Back   Unix Technical Forum > Database Server Software > PostgreSQL > pgsql Bugs

Register FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 06-02-2008, 12:35 PM
Shantanu
 
Posts: n/a
Default Re: what are the ways to avoid --- "ERROR: EXECUTE of SELECT ... INTO is not implemented yet"

Here is my real use case

1) We have nornal SELECT ...INTO calls in the procedure calls
2) However we landed ourselves with the following problem
http://www.postgresql.org/docs/faqs.FAQ.html#item4.19

<snip>
4.19) Why do I get "relation with OID ##### does not exist" errors when
accessing temporary tables in PL/PgSQL functions?

In PostgreSQL versions < 8.3, PL/PgSQL caches function scripts, and an
unfortunate side effect is that if a PL/PgSQL function accesses a temporary
table, and that table is later dropped and recreated, and the function
called again, the function will fail because the cached function contents
still point to the old temporary table. The solution is to use EXECUTE for
temporary table access in PL/PgSQL. This will cause the query to be reparsed
every time.

This problem does not occur in PostgreSQL 8.3 and later.
</snip>

3) So the solution we are trying to implement is the EXECUTE command one.

This is causing the SELECT ...INTO problem


Upgrade is not an option

Currently the only available solution is
Use a temporary table where we write the local variable and make it read
from the table .

Any alternatives ?

~
Shantanu


On Sat, May 31, 2008 at 8:38 AM, <tomas@tuxteam.de> wrote:

> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> On Fri, May 30, 2008 at 09:57:49PM +0530, Shantanu wrote:
> > Hello experts,
> >
> >
> > I am facing this error.
> >
> > mydb=> select version();
> > version
> >
> >

> --------------------------------------------------------------------------------
> >
> > PostgreSQL 8.1.9
> >
> > (1 row)
> >
> > mydb=> \i /tmp/test.sql
> > CREATE FUNCTION
> > mydb=> select sp_test();
> > ERROR: EXECUTE of SELECT ... INTO is not implemented yet
> > CONTEXT: PL/pgSQL function "sp_test" line 4 at execute statement
> >
> >
> > mydb=>
> > [1]+ Stopped su - dbu
> > mymachine<root># cat /tmp/test.sql
> > create or replace function sp_test() RETURNS void as $$
> > declare
> > l_var timestamp;
> > begin
> > execute 'SELECT NOW() INTO l_var';

> ^^^^^^^^^^^^^^^^^^
>
> Why do you need execute '...' at all? Why not directly do instead
>
> SELECT NOW() into l_var;
>
> What is your "real" use case?
>
> Note that if you really need the dynamic command, you might put its
> result int a variable, like so:
>
> EXECUTE 'SELECT NOW()' INTO l_var;
>
> ...but if we don't know what you are trying to achieve, it's difficult
> to provide meaningful recommendations.
>
> Regards
> - -- tomás
> -----BEGIN PGP SIGNATURE-----
> Version: GnuPG v1.4.6 (GNU/Linux)
>
> iD8DBQFIQMEjBcgs9XrR2kYRAnaWAJ9Mpu/qvqzi911yiftbe3lLYZiyLgCfcWIl
> TKs78mgZiKFRZcHnmHMQnOw=
> =I2iD
> -----END PGP SIGNATURE-----
>


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 06-02-2008, 12:35 PM
tomas@tuxteam.de
 
Posts: n/a
Default Re: what are the ways to avoid --- "ERROR: EXECUTE ofSELECT ... INTO is not implemented yet"

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On Sat, May 31, 2008 at 10:51:35PM +0530, Shantanu wrote:
> Here is my real use case
>
> 1) We have nornal SELECT ...INTO calls in the procedure calls
> 2) However we landed ourselves with the following problem
> http://www.postgresql.org/docs/faqs.FAQ.html#item4.19


[...]

> Any alternatives ?


Well -- according to the 8.1 docs (I don't have an 8.1 around at the
moment, sorry), one of my proposals should work:

> On Sat, May 31, 2008 at 8:38 AM, <tomas@tuxteam.de> wrote:
>


[...]

> > Note that if you really need the dynamic command, you might put its
> > result int a variable, like so:
> >
> > EXECUTE 'SELECT NOW()' INTO l_var;


[...]

(see <http://www.postgresql.org/docs/8.1/static/plpgsql-statements.html#PLPGSQL-STATEMENTS-EXECUTING-DYN>).

Did you try that? Did it work?

Regards
- -- tomás
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iD8DBQFIQ6LIBcgs9XrR2kYRAnDHAJsEz/SS7o/sIwy7dqSGSKpeVhOLlQCfetQM
GSbMIG2s7DUPOIpN6xDKocQ=
=Cb8o
-----END PGP SIGNATURE-----

--
Sent via pgsql-bugs mailing list (pgsql-bugs@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-bugs

Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 02:33 AM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.2.0
www.UnixAdminTalk.com