Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

temporary tables

6 views
Skip to first unread message

Greg Stark

unread,
Jan 17, 2003, 6:06:39 PM1/17/03
to

I've always avoided using temporary tables for OLTP applications because I was
afraid the rapid creating and deleting of temporary data would limit
scalability.

Now I'm finding they might be necessary for a particular problem so I'm
looking for information on how efficient they are with Postgres. In my case
it's being used for a set of purely read-only queries for performance reasons.
I won't be updating the temporary table at all once created.

Will postgres write out the data to disk or just store it in local memory in
the single backend using it? Will it be able to handle lots of users
simultaneously creating and destroying these temporary tables without
performance degrading?

I'm only looking at using them because I have four separate queries based on a
data set that is the result of aggregating a much larger data set. The only
reason to use the temporary tables is for performance reasons, so if it won't
help over rerunning the slow aggregate subquery four times then, well, I have
a problem, because that would be too slow.

Incidentally, temporary tables don't seem to appear anywhere in the online
docs, and are only mentioned briefly in my book (yes, the same book). Is there
any way to control when the temporary tables are destroyed other than at the
end of the session? Is there any way to tell Postgres to destroy them at the
end of a transaction or do i assume i have to do it manually? Do I use drop
table normally?

--
greg


---------------------------(end of broadcast)---------------------------
TIP 3: if posting/reading through Usenet, please send an appropriate
subscribe-nomail command to majo...@postgresql.org so that your
message can get through to the mailing list cleanly

Bruce Momjian

unread,
Jan 17, 2003, 7:11:42 PM1/17/03
to

If you create a LOCAL TEMPORARY table, it will be automatically deleted
at the end of the transaction. Also, in 7.3, temporary table data will
_not_ be synced/forced to disk like ordinary tables, though disk will
still be used as backing store for the table. You can drop them
manually too.

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

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

Mike Mascari

unread,
Jan 17, 2003, 7:37:45 PM1/17/03
to
Bruce Momjian wrote:
> If you create a LOCAL TEMPORARY table, it will be automatically deleted
> at the end of the transaction. Also, in 7.3, temporary table data will
> _not_ be synced/forced to disk like ordinary tables, though disk will
> still be used as backing store for the table. You can drop them
> manually too.
>
> Greg Stark wrote:
>
>>I've always avoided using temporary tables for OLTP applications because I was
>>afraid the rapid creating and deleting of temporary data would limit
>>scalability.

Forgive me if I'm wrong Bruce, but I thought the LOCAL option
was WRT session visbility, not lifetime. IOW, all TEMP tables
exist until dropped or until the end of session, not
transaction. And LOCAL vs. GLOBAL determines visibility in other
sessions. Wasn't the point of Gavin's patch for ON COMMIT DROP
that got bumped to 7.4 to have the DBMS drop TEMP tables at TX
commit?

Mike Mascari
mas...@mascari.com

---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://archives.postgresql.org

Bruce Momjian

unread,
Jan 17, 2003, 9:00:12 PM1/17/03
to

Oops, I was wrong. I thought we had some auto-destroy of table on
commit. I now remember we have _only_ in 7.4:

CREATE TABLE
...
[ ON COMMIT { PRESERVE ROWS | DELETE ROWS | DROP } ]

We tried to get this into 7.3, but it arrive too late.

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

--

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

---------------------------(end of broadcast)---------------------------
TIP 1: subscribe and unsubscribe commands go to majo...@postgresql.org

Tom Lane

unread,
Jan 17, 2003, 11:18:12 PM1/17/03
to
Mike Mascari <mas...@mascari.com> writes:
> Forgive me if I'm wrong Bruce, but I thought the LOCAL option
> was WRT session visbility, not lifetime. IOW, all TEMP tables
> exist until dropped or until the end of session, not
> transaction. And LOCAL vs. GLOBAL determines visibility in other
> sessions.

Postgres doesn't implement the LOCAL/GLOBAL distinction; in fact,
when you get right down to it, our temporary tables have almost no
visible correlation to the SQL spec's notion of temporary tables.
Our temp tables are per-session. SQL defines temp tables with
respect to concepts like modules, which we ain't got.

regards, tom lane

0 new messages