PostgreSQL pg_blocking_pids() 函数使用指南
PostgreSQL pg_blocking_pids() 函数返回阻止指定的会话获取锁的会话的进程 ID 列表。
pg_blocking_pids() 语法
这里是 PostgreSQL pg_blocking_pids() 函数的语法:
pg_blocking_pids(pid integer) -> integer[]
参数
pid- 被阻止的会话的进程 ID。
返回值
PostgreSQL pg_blocking_pids() 函数返回一个数组,它包含所有的阻止指定的会话获取锁的会话的进程 ID。
pg_blocking_pids() 示例
演示 pg_blocking_pids() 的用法需要 3 个会话,请按照如下步骤进行本示例。
-
打开一个会话并登录,使用
pg_backend_pid()函数查看当前会话的进程 ID:SELECT pg_backend_pid();pg_backend_pid ---------------- 1152启动事务
BEGIN;锁定
student表:LOCK TABLE student IN ACCESS EXCLUSIVE MODE; -
重新打开一个新会话并登录,使用
pg_backend_pid()函数查看当前会话的进程 ID:SELECT pg_backend_pid();pg_backend_pid ---------------- 18376启动事务:
BEGIN;向
student表插入一个新行:INSERT INTO student (name, gender) VALUES ('Tim', 'M');你会发现,这个执行被阻止了,一直没有返回。
-
重新打开一个新会话并登录,使用
pg_blocking_pids()函数查看那些阻止了第二个会话(18376)的会话:SELECT pg_blocking_pids(18376);pg_blocking_pids ------------------ {1152}1152是第一个会话的进程 ID。这说明第一个会话阻止了第二个会话。