pg_advisory_unlock_all()

用于释放 advisory locks 的函数

pg_advisory_unlock_all() 是一个系统函数,用于释放当前会话持有的所有会话级别的 advisory locks

pg_advisory_unlock_all()PostgreSQL 8.2 中被添加。

用法

pg_advisory_unlock_all () → void

pg_advisory_unlock_all() 会释放会话持有的所有会话级别的共享和排他锁。要释放单个共享锁,请使用 pg_advisory_unlock_shared(),要释放单个排他锁,请使用 pg_advisory_unlock()

请注意,pg_advisory_unlock_all() 不会提供任何关于实际释放了哪些锁(如果有的话)的反馈,即使当前会话不持有任何会话级别的锁,它也可以成功执行。

变更历史

示例

pg_advisory_unlock_all() 的基本用法示例

postgres=# SELECT pg_advisory_lock(123);
 pg_advisory_lock
------------------

(1 row)

postgres=# SELECT pg_advisory_lock(456);
 pg_advisory_lock
------------------

(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 |   456 |        1 | ExclusiveLock | 3795641 | t       | f
 advisory |        5 |   123 |        1 | ExclusiveLock | 3795641 | t       | f
(2 rows)

postgres=# SELECT pg_advisory_unlock_all();
 pg_advisory_unlock_all
------------------------

(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
----------+----------+-------+----------+------+-----+---------+----------
(0 rows)

如果当前会话不持有任何会话级别的锁,pg_advisory_unlock_all() 将不起作用,也不会影响其他会话持有的锁。

postgres=# SELECT pg_backend_pid();
 pg_backend_pid 
----------------
        3796065
(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 |   456 |        1 | ExclusiveLock | 3795641 | t       | f
 advisory |        5 |   123 |        1 | ExclusiveLock | 3795641 | t       | f
(2 rows)

postgres=# SELECT pg_advisory_unlock_all();
 pg_advisory_unlock_all 
------------------------
 
(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 |   456 |        1 | ExclusiveLock | 3795641 | t       | f
 advisory |        5 |   123 |        1 | ExclusiveLock | 3795641 | t       | f
(2 rows)

分类

锁定, 系统函数

另请参阅

pg_advisory_lock(), pg_advisory_unlock(), pg_advisory_unlock_shared()

反馈

请在此处 提交任何关于“pg_advisory_unlock_all()”的评论、建议或更正