我正在使用pg_advisory_lockpostgres 中的函数,如果它无法锁定特定键,它会阻塞/等待。我想知道是否有办法让这个超时?我找不到任何东西。如果没有,有没有办法让一个会话强制释放另一个会话获得的锁?
谢谢!
如果您根本不想阻止,则可以调用pg_try_advisory_lock().
如果阻塞pg_advisory_lock()调用确实导致死锁,它将在deadlock_timeout设置指定的间隔(默认为一秒)后自动超时。您还可以通过设置lock_timeout(默认情况下禁用)来限制锁定等待时间 - 死锁与否。
请注意,触发这些超时中的任何一个都会引发错误,因此将错误处理包装在函数中可能很有用,例如:
CREATE FUNCTION pg_try_advisory_lock_with_timeout(key bigint) RETURNS boolean
SET lock_timeout TO '1s'
AS $$
BEGIN
PERFORM pg_advisory_lock(key);
RETURN true;
EXCEPTION
WHEN lock_not_available OR deadlock_detected THEN
RETURN false;
END;
$$
LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3627 次 |
| 最近记录: |