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。这说明第一个会话阻止了第二个会话。