Temporary table in pl/pgsql

Поиск
Список
Период
Сортировка
Искать
От
Raymond O'Donnell
Тема
Temporary table in pl/pgsql
Дата
Msg-id
461FEBB9.2010608@iol.ie
Список
Дерево обсуждения
Temporary table in pl/pgsql Raymond O'Donnell <rod@iol.ie>
Re: Temporary table in pl/pgsql "Merlin Moncure" <mmoncure@gmail.com>
Re: Temporary table in pl/pgsql Raymond O'Donnell <rod@iol.ie>
Re: Temporary table in pl/pgsql Listmail <lists@peufeu.com>
Hello again all,

I'm using a temporary table in a pl/PgSQL function, and I've read the 
bit in the FAQ about using EXECUTE to force the table-creation query to 
be re-evaluated each time the function is called.

However, it doesn't seem to work for me. The first time I call the 
function, all is well; the second (and every subsequent) time, the 
function bombs with the 'relation with OID XXXXX does not exist' error - 
this seems to imply that the EXECUTE statement is getting cached along 
with the rest of the function, which according to the docs ain't 
supposed to happen :-(

I'm using 8.2.3 on WinXP.

Here's the first part of the function - I'll supply a complete test case 
if necessary:

-------------------------------------------------
create or replace function tutor_availability_remaining
(
   aTerm integer,
   anInstrument varchar,
   aLevel varchar
)
returns setof tutor_availability
as
$$
declare
   OrigBlock tutor_availability%rowtype;
   SlotsForDay teachingslots%rowtype;
begin
   -- Create a termporary table to hold the results.
   -- Use EXECUTE to force this to be executed each
   -- time, as per the FAQ.
   execute 'create temporary table TheResults('
     || 'block_id integer, term_id integer, term_name varchar(40), '
     || 'the_date date, month_name varchar(12), day_name varchar(12), '
     || 'is_weekend boolean, tutor_id integer, surname varchar(40), '
     || 'firstname varchar(40), block_starts time without time zone, '
     || 'block_ends time without time zone)';

   -- stuff snipped here...
   -- etc etc

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

I wondered if, the string passed to EXECUTE, being entirely literal, it 
was somehow getting over-optimised :) and I tried changing the second 
line above to use one of the parameters passed in, thus -

   'term_id integer default ' || quote_literal(aTerm) ...

- but it made no difference.

What am I missing?

TIA,

Ray.


---------------------------------------------------------------
Raymond O'Donnell, Director of Music, Galway Cathedral, Ireland
rod@iol.ie
---------------------------------------------------------------
В списке pgsql-general по дате отправления
От: jungmin shin
Дата:
Сообщение: meaning of Total runtime
От: Joshua D. Drake
Дата:
Сообщение: Re: meaning of Total runtime
FAQ