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