Re: row level lock and table level locks - Mailing list pgsql-hackers

From Larry Douzie
Subject Re: row level lock and table level locks
Date
Msg-id 20030908034556.52297.qmail@web60202.mail.yahoo.com
Whole thread Raw
In response to Re: row level lock and table level locks  (Tom Lane <tgl@sss.pgh.pa.us>)
Responses Re: row level lock and table level locks  (Tom Lane <tgl@sss.pgh.pa.us>)
List pgsql-hackers
Is there a array or some sort of datastructures that store all the HeapTupleDatas for all rows in the db?
like we have the LockData storing all the current locks in the db.
thanks!

Tom Lane <tgl@sss.pgh.pa.us> wrote:
Larry Douzie writes:
>> A row lock is represented by storing the locking transaction's ID in
>> xmax and setting the HEAP_MARKED_FOR_UPDATE infomask bit. The bit is
>> needed to distinguish this from the case where the transaction is
>> deleting the tuple.

> Is there a similar bit modified if the row in question is being waited
> upon by some transaction?

No. We handle that case by waiting for the transaction that's locked
the row to commit or abort. (Waiting for a transaction is done by
having every transaction take out exclusive lock on its xact ID when it
starts; then would-be waiters try to take share lock on the xact ID,
causing them to block till the exclusive lock is released.)

In general, the Postgres lock management code is not designed for
transparency :-( ... it do es the jobs it's supposed to do, but it's not
always easy to inspect the visible state to find out what's happening.
Perhaps someday someone will get motivated to rewrite this stuff.

regards, tom lane


Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software

pgsql-hackers by date:

Previous
From: Alvaro Herrera
Date:
Subject: Re: row level lock and table level locks
Next
From: Tom Lane
Date:
Subject: Re: row level lock and table level locks