postgresql 查询锁表并解锁

1、查询被锁的pid以及语句, state这列如果显示成 idle in transaction 就表示被锁了

select pid, state, usename, query, query_start
from pg_stat_activity
where pid in (
    select pid from pg_locks l
                        join pg_class t on l.relation = t.oid
        and t.relkind = 'r'

);

2、解锁: 拿着上面查询出的pid放入下面的语句中

// 温柔一点的(只kill掉select)
SELECT pg_cancel_backend(pid)

// 暴力一点的(kill掉 select、update、insert、delete)
SELECT pg_terminate_backend(pid)

最后附上老外的一个链接

https://jaketrent.com/post/find-kill-locks-postgres