Re: row level lock and table level locks

Поиск
Список
Период
Сортировка
От Alvaro Herrera
Тема Re: row level lock and table level locks
Дата
Msg-id 20030908033506.GA5170@dcc.uchile.cl
обсуждение исходный текст
Ответ на Re: row level lock and table level locks  (Tom Lane <tgl@sss.pgh.pa.us>)
Ответы Re: row level lock and table level locks  (Tom Lane <tgl@sss.pgh.pa.us>)
Список pgsql-hackers
On Sun, Sep 07, 2003 at 11:24:42PM -0400, Tom Lane wrote:

> 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.)

This is interesting in the nested transactions case.  Suppose a
transaction takes a lock on a tuple.  If another transaction tries to do
the same, it has to wait for the previous transaction to finish.  That's
pretty clear and simple.

Now, if a subtransaction has got a lock on some tuple, and another
transaction tree tries to grab the lock on that tuple, it should have to
wait for the entire transaction tree to finish.  But what if the
subtransaction that got the lock aborts?  Maybe the waiter could awake
at that point.


I invented a "CommitContext", that is supposed to hold things that
should be kept in memory if a subtransaction commits, and discarded if
it aborts (think async notifies, smgr pending deletes).  The list of
things has to be kept until the transaction tree is finished, but can be
discarded in a single operation if any subtransaction aborts.  Maybe
some similar thing can be done with locks?

-- 
Alvaro Herrera (<alvherre[a]dcc.uchile.cl>)
"El conflicto es el camino real hacia la union"


В списке pgsql-hackers по дате отправления:

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: row level lock and table level locks
Следующее
От: Larry Douzie
Дата:
Сообщение: Re: row level lock and table level locks