查詢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)