Search Postgresql Archives

Re: LOCK ... NOWAIT throws error

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 2006-11-29 at 16:47 +0100, Michal Taborsky - Internet Mall
wrote:
> Hello.
> 
> We started using, in one of our applications, the LOCK ... NOWAIT
> functionality. It works as it's supposed to, but there is one, albeit
> tiny, annoyance about it.
> 
> When the LOCK cannot be immediately obtained, this statement logs an
> ERROR message. But in this case, I think it is not appropriate to call
> this event an error, since I am well aware it might happen and actually
> expect it, since I use the NOWAIT switch.
> 

I think it must be an error if it's uncaught. Otherwise how would it
inform the client application that no lock was acquired?

The best thing to do is create a procedural language function that
catches the error. Then, it will not be reported. For example:

CREATE OR REPLACE FUNCTION lock_nowait_noerror() RETURNS BOOLEAN
  LANGUAGE plpgsql AS 
$$
BEGIN
  BEGIN 
    LOCK locktable NOWAIT;
    RETURN TRUE; 
  EXCEPTION WHEN lock_not_available THEN 
    RETURN FALSE; 
  END;
END;
$$;

Then, in your client app you can check the return value to see whether
the lock was acquired.

Hope this helps,
    Jeff Davis



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux