http://blog.csdn.net/rudygao/article/details/49334001
SELECT locker.pid,
pc.relname,
locker.mode,
locker_act.application_name,
least(query_start,xact_start) start_time,
locker_act.state,
CASE
WHEN granted='f' THEN
'wait_lock'
WHEN granted='t' THEN
'get_lock'
END lock_satus,current_timestamp - least(query_start,xact_start) AS runtime,
locker_act.query
FROM pg_locks locker,pg_stat_activity locker_act, pg_class pc
WHERE locker.pid=locker_act.pid
AND NOT locker.pid=pg_backend_pid()
AND application_name<>'pg_statsinfod'
AND locker.relation = pc.oid
AND pc.reltype<>0 --and pc.relname='t'
ORDER BY runtime desc;
kill有两种方式,第一种是:
SELECT pg_cancel_backend(PID);
这种方式只能kill select查询,对update、delete 及DML不生效)
第二种是:
SELECT pg_terminate_backend(PID);
这种可以kill掉各种操作(select、update、delete、drop等)操作