查询pg_locks表,获取未得到满足的锁信息:
select * from pg_locks where granted is false ; --查询得不到锁的,那就是两个互相等待对方持有的锁
查询活动的事务会话进程,和上一步的锁的事务对应起来:
select * from pg_stat_activity WHERE state = 'active'
在数据库服务器上使用ps -ef |grep postgre
可以查看相同pid的进程信息。
比较pid与pg_stat_activity表查出来的信息,确定两个互相等待的pid,在下一步使用pg_terminate_backend来结束掉。
结束pg事务会话进程,pg_terminate_backend使用方法如下(64738为一个具体的pid举例):
SELECT pg_terminate_backend(64738)