-1. 如何知道有哪些表、哪些进程被锁住了?

select * from pg_locks a
join pg_class b on a.relation = b.oid
join pg_stat_activity c on a.pid = c.pid
where a.mode like '%ExclusiveLock%';

## 参考:PostgreSQL - 如何杀死被锁死的进程 - 雨临Lewis - 博客园 (cnblogs.com)

=============================================

:::::查询当前所有锁与对象的对应关系

select a.locktype,a.pid,a.relation,a.mode,a.granted,b.relname from pg_locks a,pg_class b where a.relation=b.oid;

:::::查询锁定query,用户

 

select usename,query,client_addr, query_start,pid,client_addr from pg_stat_activity where pid=15010;
select query from pg_stat_activity where pid=15008;

 

:::::pg的锁类型

 

acesss share: 只与access exclusive冲突,select 加锁,在用户select时不能做ddl操作

row share: 与exclusive和access exclusive冲突,类似mysql共享意向锁,select for update/select for share 加锁

PostgreSQL 日常运维 - 知乎 (zhihu.com)

相关文章: