pg_advisory_xact_lock() 是一个用于获取独占事务级别的咨询锁的系统函数。
pg_advisory_xact_lock() 在 PostgreSQL 9.1 中添加。
用法
pg_advisory_xact_lock (keybigint) →void
pg_advisory_xact_lock (key1integer,key2integer) →void
pg_advisory_xact_lock() 将无限期等待以获取指定的锁。要获取锁,如果锁不可用则立即返回,请使用 pg_try_advisory_xact_lock()。
获取的锁将在事务结束时释放。pg_advisory_xact_lock() 在事务外执行无效。
变更历史
- PostgreSQL 9.1
- 添加(提交 62c7bd31)
示例
pg_advisory_xact_lock() 的基本用法示例
postgres=# BEGIN;
BEGIN
postgres=*# SELECT pg_advisory_xact_lock(123);
pg_advisory_xact_lock
-----------------------
(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/18 | ExclusiveLock | 3915352 | t | f
(1 row)
postgres=*# ROLLBACK;
ROLLBACK
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
----------+----------+-------+----------+--------------------+------+-----+---------+----------
(0 rows)
pg_advisory_xact_lock() 在事务外执行无效
postgres=# SELECT pg_advisory_xact_lock(123);
pg_advisory_xact_lock
-----------------------
(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
----------+----------+-------+----------+--------------------+------+-----+---------+----------
(0 rows)
参考资料
- PostgreSQL 文档: 咨询锁函数
