>TupleTables are just temporary data structures to hold transiently
>created tuples during execution of a query.  There's usually one for
>each plan node.

So, if i have the following transaction:
begin work;
select * from students where a age=19 for update;
lock table studens in share mode;
commit;

The TupleTable will exist for the query from the point the query is made 
untill the transaction is committed? or does the TupleTable go away as soon 
as query is finished executing?
I would think the TupleTable for that query is held untill the transaction 
is committed since lock on the tuple is endtill the end of transaction
Thanks



>From: Tom Lane <tgl@sss.pgh.pa.us>
>To: "Jenny -" <nat_lazy@hotmail.com>
>CC: pgsql-hackers@postgresql.org
>Subject: Re: [HACKERS] row level lock and table level locks Date: Mon, 08 
>Sep 2003 12:49:51 -0400
>
>"Jenny -" <nat_lazy@hotmail.com> writes:
> > I found out that TupleTable stores per-tuple information(it stores
> > HeapTupleData) and that also there are multiple TupleTables in the db at 
>a
> > time.Based on what are diffrent TupleTables created?
>
cc>
>			regards, tom lane
>
>---------------------------(end of broadcast)---------------------------
>TIP 4: Don't 'kill -9' the postmaster

_________________________________________________________________
Express yourself with MSN Messenger 6.0 -- download now! 
http://www.msnmessenger-download.com/tracking/reach_general


Mon, 08 Sep 2003 18:09:33 -0700
"Jenny -" <nat_lazy@hotmail.com>
Re: row level lock and table level locks
"Jenny -" <nat_lazy@hotmail.com> writes:
>> TupleTables are just temporary data structures to hold transiently
>> created tuples during execution of a query.  There's usually one for
>> each plan node.

> The TupleTable will exist for the query from the point the query is made 
> untill the transaction is committed? or does the TupleTable go away as soon 
> as query is finished executing?

It goes away as soon as the query finishes.

My answer above was mistaken --- plan nodes usually allocate slots in a
single TupleTable created (and destroyed) by execMain.c, rather than
each having their own TupleTable.  But it's still a query-lifetime data
structure.

> I would think the TupleTable for that query is held untill the transaction 
> is committed since lock on the tuple is endtill the end of transaction

You keep looking for nonexistent locks on tuples ...

The only resources represented by a TupleTable entry are memory for
a transient tuple (if we rewrote the system today, we'd forget that
function, since short-term memory contexts can do the job better)
or a buffer pin for a tuple that's sitting in a shared disk buffer.
There is no reason to hold a buffer pin beyond the time that the tuple
might actually be referenced by the query plan.

			regards, tom lane

Mon, 08 Sep 2003 22:33:35 -0400
Tom Lane <tgl@sss.pgh.pa.us>
Re: row level lock and table level locks 