Temporary Tables - Mailing list pgsql-general

From Roman Fail
Subject Temporary Tables
Date
Msg-id 9B1C77393DED0D4B9DAA1AA1742942DA3BCB1E@pos_pdc.posportal.com
Whole thread Raw
Responses Re: Temporary Tables  (Stephan Szabo <sszabo@megazone23.bigpanda.com>)
List pgsql-general
I've just written a function in PL/pgSQL that creates two temporary tables, then drops them at the end.  For each
session,the first time I run it works great.  The second time I try it from the same session, I get this error: 

trans=# SELECT * FROM tranddthistory(6, '2003-03-20', '2003-04-05') AS (senddate date, day char(3), filename
varchar(40),postingdate date, systemdate date) ; 
WARNING:  Error occurred while executing PL/pgSQL function tranddthistory
WARNING:  line 19 at SQL statement
ERROR:  pg_class_aclcheck: relation 89979461 not found
trans=#

I feel pretty confident that I'm doing something wrong with the temporary tables.   I've read everything I can find in
thedocs, searched the list archives, and come up empty.  Any ideas? 

TIA,
Roman Fail


Environment:  PostgreSQL 7.3.1 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.2 20020903 (Red Hat Linux 8.0 3.2-7)

The function:

CREATE OR REPLACE FUNCTION public.tranddthistory(int4, timestamp, timestamp) RETURNS SETOF record AS '
DECLARE
  vclientid ALIAS FOR $1;
  vstartdate ALIAS FOR $2;
  venddate ALIAS FOR $3;
  vrec record;
  vcurrdate DATE;
  vfiledate DATE;
  vdow int4;
  vday CHAR(3);
BEGIN

/* Create a temporary table that has a record for
   each day of the week where we expect to receive a file.
   Sunday = 0, Monday = 1, etc.
*/
CREATE TEMPORARY TABLE ttclientdays (dow int4);
/* METAVANTE, Monday to Friday */
IF vclientid = 6 THEN
  INSERT INTO ttclientdays (dow) VALUES (1);
  INSERT INTO ttclientdays (dow) VALUES (2);
  INSERT INTO ttclientdays (dow) VALUES (3);
  INSERT INTO ttclientdays (dow) VALUES (4);
  INSERT INTO ttclientdays (dow) VALUES (5);
END IF;
/* SOUTHTRUST, Sunday to Friday */
IF vclientid = 316 THEN
  INSERT INTO ttclientdays (dow) VALUES (0);
  INSERT INTO ttclientdays (dow) VALUES (1);
  INSERT INTO ttclientdays (dow) VALUES (2);
  INSERT INTO ttclientdays (dow) VALUES (3);
  INSERT INTO ttclientdays (dow) VALUES (4);
  INSERT INTO ttclientdays (dow) VALUES (5);
END IF;

/* Create a temporary table with a record for
   each day during the specified date range where
   we would expect to receive a file
   for this client
*/
vcurrdate := vstartdate;
CREATE TEMPORARY TABLE ttfiledates (filedate DATE, day CHAR(3));
WHILE vcurrdate <= venddate LOOP
  vdow := date_part(''dow'', vcurrdate);
  IF vdow IN (SELECT dow FROM ttclientdays) THEN
    IF vdow = 0 THEN vday := ''SUN''; END IF;
    IF vdow = 1 THEN vday := ''MON''; END IF;
    IF vdow = 2 THEN vday := ''TUE''; END IF;
    IF vdow = 3 THEN vday := ''WED''; END IF;
    IF vdow = 4 THEN vday := ''THU''; END IF;
    IF vdow = 5 THEN vday := ''FRI''; END IF;
    IF vdow = 6 THEN vday := ''SAT''; END IF;
    INSERT INTO ttfiledates (filedate, day) VALUES (vcurrdate, vday);
  END IF;
  vcurrdate = vcurrdate + interval ''1 day'';
END LOOP;

FOR vrec IN
  SELECT DISTINCT filedate, day, filename, postingdate, systemdate
      FROM ttfiledates
      LEFT JOIN tranheader ON filedate = systemdate
      WHERE systemdate BETWEEN vstartdate AND venddate
      AND clientid = vclientid
      ORDER BY filedate
  LOOP
  RETURN NEXT vrec;
END LOOP;

DROP TABLE ttclientdays;
DROP TABLE ttfiledates;

RETURN;

END;

'  LANGUAGE 'plpgsql' STABLE;


pgsql-general by date:

Previous
From: Martijn van Oosterhout
Date:
Subject: Re: special columns
Next
From: Stephan Szabo
Date:
Subject: Re: Temporary Tables