pg_try_advisory_lock_shared() 是一个系统函数,用于尝试获取共享会话级 建议锁。如果无法获取锁,它会立即返回。
pg_try_advisory_lock_shared() 是在 PostgreSQL 8.2 中添加的。
用法
pg_try_advisory_lock_shared (keybigint) →void
pg_try_advisory_lock_shared (key1integer,key2integer) →void
如果成功获取锁,则返回 true,否则返回 false。
与 pg_advisory_lock_shared() 不同,pg_try_advisory_lock_shared() 会立即返回,而不会等待锁可用。
变更历史
- PostgreSQL 8.2
- 添加于(提交 9b4cda0d)
示例
pg_try_advisory_lock_shared() 的基本用法示例
postgres=# SELECT pg_try_advisory_lock(123); pg_try_advisory_lock ---------------------- t (1 row)
当另一个会话持有所需的锁时执行 pg_try_advisory_lock_shared()
postgres=# SELECT pg_backend_pid();
pg_backend_pid
----------------
3905353
(1 row)
postgres=# SELECT locktype, database, objid, objsubid, mode, pid, granted, fastpath
FROM pg_locks
WHERE locktype = 'advisory';
locktype | database | objid | objsubid | mode | pid | granted | fastpath
----------+----------+-------+----------+---------------+---------+---------+----------
advisory | 5 | 123 | 1 | ExclusiveLock | 3905277 | t | f
(1 row)
postgres=# SELECT pg_try_advisory_lock_shared(123);
pg_try_advisory_lock_shared
-----------------------------
f
(1 row)
请注意,如果另一个会话也持有共享锁,则锁请求会成功。
参考资料
- PostgreSQL 文档: 咨询锁函数
