pg_try_advisory_xact_lock() 是一个系统函数,用于尝试获取事务级别的排他咨询锁。如果无法获取锁,它将立即返回。
pg_try_advisory_xact_lock() 添加于 PostgreSQL 9.1。
用法
pg_try_advisory_xact_lock (keybigint) →void
pg_try_advisory_xact_lock (key1integer,key2integer) →void
如果成功获取锁,则返回 true,否则返回 false。
与 pg_advisory_xact_lock() 相比,pg_try_advisory_xact_lock() 会立即返回,而不会等待锁可用。
获取的锁将在事务结束时释放。如果在事务之外执行 pg_try_advisory_xact_lock(),则无效。
变更历史
- PostgreSQL 9.1
- 添加(提交 62c7bd31)
示例
pg_try_advisory_xact_lock() 的基本用法示例
postgres=# BEGIN;
BEGIN
postgres=*# SELECT pg_try_advisory_xact_lock(123);
pg_try_advisory_xact_lock
---------------------------
t
(1 row)
postgres=*# SELECT locktype, database, objid, objsubid,virtualtransaction, mode, pid, granted, fastpath
FROM pg_locks
WHERE locktype = 'advisory';
locktype | database | objid | objsubid | virtualtransaction | mode | pid | granted | fastpath
----------+----------+-------+----------+--------------------+---------------+---------+---------+----------
advisory | 5 | 123 | 1 | 32/30 | ExclusiveLock | 3915352 | t | f
(1 row)
当另一个会话持有所需锁时执行 pg_try_advisory_xact_lock()
postgres=# BEGIN; BEGIN postgres=*# SELECT pg_try_advisory_xact_lock(123); pg_try_advisory_xact_lock --------------------------- f (1 row)
参考资料
- PostgreSQL 文档: 咨询锁函数
