Search Postgresql Archives

Re: Question Regarding a Temporary Table

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Thanks for the reponse Jeff. See comments below.

On Wednesday 20 September 2006 05:09 pm, Jeff Davis <pgsql@xxxxxxxxxxx> thus 
communicated:
--> On Wed, 2006-09-20 at 16:51 -0400, Terry Lee Tucker wrote:
--> > Greetings:
--> >
--> > I have have a plpgsql function that creates a temporary table to
 facilitate --> > some processing. Here is the code:
--> >     CREATE TEMP TABLE tmp (code         VARCHAR,
--> >                            booked       INTEGER,
--> >                            avail        INTEGER,
--> >                            covered      INTEGER,
--> >                            profit       NUMERIC (10,2),
--> >                            billed       NUMERIC (10,2))
--> >             WITHOUT OIDS ON COMMIT DROP;
--> >
--> > Note the "ON COMMIT DROP". I would expect this table to disapear after
 the --> > function completes, but it does not. Also, if I execute the the
 function -->
--> In 8.1 it does drop for me on COMMIT, as you would expect. I don't know
--> about 7.4.
-->
--> > twice in a row from the psql interface, on the second try, I get the
--> > following error:
--> > sev=# select * from custSprtRpt('04/01/06', current_date);
--> > NOTICE:  custSprtRpt ()
--> > ERROR:  relation with OID 123654 does not exist
--> > CONTEXT:  PL/pgSQL function "custsprtrpt" line 39 at SQL statement
--> >
--> > If have to reload the function with \i sqlfunc/custSprtRpt.plsql so
 that it --> > will work again. Why is this?
-->
--> PL/pgSQL caches query plans. Unfortunately, there is currently no good
--> mechanism to invalidate the plans, and the function is using a stale
--> plan with an OID that no longer exists.
-->
--> The workaround is to use "EXECUTE" in the function, and build the query
--> from a string. That prevents PL/pgSQL from caching the plan.
-->
--> What confuses me is, if it didn't drop your table, why would it say the
--> oid doesn't exist?

Well, I was assuming that that the table wasn't being dropped and that was 
what was causing the error. I can see from your comments, that I was wrong on 
that asssumption. I can do this with and execute, but it's going to be a pain 
to acomplish. I wonder what good a temporary table is if you can't use the 
code which creates it twice in a row with reloading the function?

Anyway, thanks for the response...

-->
--> Regards,
--> 	Jeff Davis
-->
-->
-->
-->
--> ---------------------------(end of broadcast)---------------------------
--> TIP 6: explain analyze is your friend
-->

-- 
Terry Tucker
Turbo's IT Manager
Turbo, division of Ozburn-Hessey Logistics
2251 Jesse Jewell Pkwy NE
Gainesville, GA 30501
Tel: (336) 372-6812  Fax: (336) 372-6812  Cell: (336) 363-4719
terry@xxxxxxxx
www.turbocorp.com


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux