Обсуждение: Row Level Locking Problem
Hi I have a big problem, when I try to lock a row locked previouly, It wait until commit / rollback operation. How could lock a row if It is not locked already? Could I now if a row is locked? Could I get some error message from postgres when I do 'select .... for update' to a locked row instead of wait for commit / rollback? cray2@mail.com
At 02:33 PM 8/20/00 +0200, Cray2 wrote: > I have a big problem, when I try to lock a row locked previouly, It wait >until commit / rollback operation. > > How could lock a row if It is not locked already? > > Could I now if a row is locked? > > Could I get some error message from postgres when I do 'select .... >for update' to a locked row instead of wait for commit / rollback? Well, this is how it is supposed to work. "select for update" only works within a transaction and holds the lock until the transaction is complete. What exactly is it that you're trying to do? - Don Baccus, Portland OR <dhogaza@pacifier.com> Nature photos, on-line guides, Pacific Northwest Rare Bird Alert Serviceand other goodies at http://donb.photo.net.
Cray2 wrote: > > Hi > > I have a big problem, when I try to lock a row locked previouly, It wait > until commit / rollback operation. > > How could lock a row if It is not locked already? > > Could I now if a row is locked? > > Could I get some error message from postgres when I do 'select .... > for update' to a locked row instead of wait for commit / rollback? It is theoretically possible to write a function is_locked and then do select .... for update where not is_locked(); and thereby lock only not-yet-locked functions. ------------------ Hannu
> Well, this is how it is supposed to work. "select for update" only > works within a transaction and holds the lock until the transaction > is complete. > > What exactly is it that you're trying to do? Let us suppose that we have 2 transactions, and attempt to block the same row in the two transactions. One of them will wait until in the other it is commited or rollbacked. Oracle has "select for update nowait", it does that instead of waiting the conclusion of the other transaction, gives back an error to us saying that the row already has been blocked. I am looking for something similar to this, or in its defect, knowledge if a row has been blocked, to avoid this waits, or information to make the parameter 'nowait' to realize this operation Juan Carlos Perez Vazquez Cray2@mail.com ______________________________________________ FREE Personalized Email at Mail.com Sign up at http://www.mail.com/?sr=signup
> Well, this is how it is supposed to work. "select for update" only > works within a transaction and holds the lock until the transaction > is complete. > > What exactly is it that you're trying to do? Let us suppose that we have 2 transactions, and attempt to block the same row in the two transactions. One of them will wait until in the other it is commited or rollbacked. Oracle has "select for update nowait", it does that instead of waiting the conclusion of the other transaction, gives back an error to us saying that the row already has been blocked. I am looking for something similar to this, or in its defect, knowledge if a row has been blocked, to avoid this waits Juan Carlos Perez Vazquez Cray2@mail.com