Re: Bug #913: plpgsql function fails on second call

From: Bruce Momjian <pgman(at)candle(dot)pha(dot)pa(dot)us>
To: jbduffy(at)ntlworld(dot)com, pgsql-bugs(at)postgresql(dot)org
Subject: Re: Bug #913: plpgsql function fails on second call
Date: 2003-03-18 17:31:04
Message-ID: 200303181731.h2IHV4F07054@candle.pha.pa.us
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-bugs


You have to use EXECUTE when creating a temp table in a function --- see
FAQ on it.

---------------------------------------------------------------------------

pgsql-bugs(at)postgresql(dot)org wrote:
> John Duffy (jbduffy(at)ntlworld(dot)com) reports a bug with a severity of 1
> The lower the number the more severe it is.
>
> Short Description
> plpgsql function fails on second call
>
> Long Description
> A function containing a left outer join declared to return a set works correctly when first called. A second call to the function terminates with an error. If the function is recreated the function then works correctly for the first call and then fails on the second.
>
> Sample Code
> createdb test
>
> create table a (id integer, value integer)
> create table b (id integer, value integer)
>
> insert into a (id, value) values (1,1)
> insert into a (id, value) values (2,2)
> insert into a (id, value) values (3,3)
> insert into b (id, value) values (1,1)
> insert into b (id, value) values (2,2)
> insert into b (id, value) values (3,3)
>
> create type ab as (a integer, b integer)
>
> createlang plpgsql test
>
> create or replace function test() returns setof ab as '
> declare
> row ab%ROWTYPE;
> begin
> create temp table ab as
> select a.value as a_value, b.value as b_value
> from a left outer join b
> on a.id = b.id;
>
> for row in select * from ab loop
> return next row;
> end loop;
>
> drop table ab;
>
> return;
> end;
> ' language 'plpgsql';
>
> test=# \i test-func.sql
> CREATE FUNCTION
>
> test=# select * from test();
> a | b
> ---+---
> 1 | 1
> 2 | 2
> 3 | 3
> (3 rows)
>
> test=# select * from test();
> WARNING: Error occurred while executing PL/pgSQL function test
> WARNING: line 9 at for over select rows
> ERROR: pg_class_aclcheck: relation 3759490 not found
>
>
> No file was uploaded with this report
>
>
> ---------------------------(end of broadcast)---------------------------
> TIP 4: Don't 'kill -9' the postmaster
>

--
Bruce Momjian | http://candle.pha.pa.us
pgman(at)candle(dot)pha(dot)pa(dot)us | (610) 359-1001
+ If your life is a hard drive, | 13 Roberts Road
+ Christ can be your backup. | Newtown Square, Pennsylvania 19073

In response to

Browse pgsql-bugs by date

  From Date Subject
Next Message Stephan Szabo 2003-03-18 18:30:09 Re: Bug #913: plpgsql function fails on second call
Previous Message pgsql-bugs 2003-03-18 17:26:49 Bug #913: plpgsql function fails on second call