postgresql查询锁表以及解除锁表
1. 查询ACTIVITY的状态等信息
select T.PID, T.STATE, T.QUERY, T.WAIT_EVENT_TYPE, T.WAIT_EVENT,
T.QUERY_START
from PG_STAT_ACTIVITY T
where T.DATNAME = '数据库名';
上面查询结果中:pid就是ACTIVITY的唯一标识,state就是活动状态,query就是正在执行的sql语句,query——start就是开始执行的时间。
2. 查询死锁的ACTIVITY
select T.PID, T.STATE, T.QUERY, T.WAIT_EVENT_TYPE, T.WAIT_EVENT,
T.QUERY_START
from PG_STAT_ACTIVITY T
where T.DATNAME = '数据库名'
and T.WAIT_EVENT_TYPE = 'Lock';
3. 将第二条查询语句的pid字段的数字值记录下来,执行下面的查询语句可以解锁:
-- 通过pid解锁对应的ACTIVITY
select PG_CANCEL_BACKEND('6984');
pg_cancel_backend()函数,该函数是取消后台操作,回滚未提交事务。