Is it possible to do a nonblocking lock? That is, 
I want several clients to execute,

    begin
    if table A is locked
    then
        go around doing stuff on other tables
    else
        lock A and do stuff on A
    endif

the problem is, if I use normal lock, then 
after one client has locked and is doing stuff on A
the other one will block and thus it won't be able
to go around doing stuff on other tables. Is it
possible to do a nonblocking lock that will just
fail if the table is locked already? 


NOTE: I tried using PQrequestCancel but it won't
cancel the request. It still blocks for as long
as the lock lasts. The only way around I've found so 
far is to use PQreset. That's crude but works. But 
it leaves a dangling postmaster process that lives
until the orignal lock is freed. Any other ideas? 

Thanks a lot 

Pablo Funes
Brandeis University
pablo@cs.brandeis.edu

Thu, 27 May 1999 18:42:11 -0400 (EDT)
Pablo Funes <pablo@cs.brandeis.edu>
nonblocking lock? 
> Is it possible to do a nonblocking lock? That is, 
> I want several clients to execute,
> 
>     begin
>     if table A is locked
>     then
>         go around doing stuff on other tables
>     else
>         lock A and do stuff on A
>     endif
> 
> the problem is, if I use normal lock, then 
> after one client has locked and is doing stuff on A
> the other one will block and thus it won't be able
> to go around doing stuff on other tables. Is it
> possible to do a nonblocking lock that will just
> fail if the table is locked already? 

Try with user locks. You can find the code in contrib/userlocks.

-- 
Massimo Dal Zotto

+----------------------------------------------------------------------+
|  Massimo Dal Zotto               email: dz@cs.unitn.it               |
|  Via Marconi, 141                phone: ++39-0461534251              |
|  38057 Pergine Valsugana (TN)      www: http://www.cs.unitn.it/~dz/  |
|  Italy                             pgp: finger dz@tango.cs.unitn.it  |
+----------------------------------------------------------------------+

Wed, 2 Jun 1999 12:23:47 +0200 (MEST)
Massimo Dal Zotto <dz@cs.unitn.it>
Re: [HACKERS] nonblocking lock?
> > Is it possible to do a nonblocking lock? That is, 
> > I want several clients to execute,
> > 
> >     begin
> >     if table A is locked
> >     then
> >         go around doing stuff on other tables
> >     else
> >         lock A and do stuff on A
> >     endif
> > 
> > the problem is, if I use normal lock, then 
> > after one client has locked and is doing stuff on A
> > the other one will block and thus it won't be able
> > to go around doing stuff on other tables. Is it
> > possible to do a nonblocking lock that will just
> > fail if the table is locked already? 
> 
> Try with user locks. You can find the code in contrib/userlocks.

Yes, this is the proper PostgreSQL solution.

-- 
  Bruce Momjian                        |  http://www.op.net/~candle
  maillist@candle.pha.pa.us            |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

Wed, 2 Jun 1999 11:33:23 -0400 (EDT)
Bruce Momjian <maillist@candle.pha.pa.us>
Re: [HACKERS] nonblocking lock?