PostgreSQL 查找包含表名的锁

The*_*age 5 database-administration relational-database postgresql-9.2

我正在尝试查看我的 PostgreSQL 数据库中特定表上发生的锁。

我看到有一个表叫 pg_locks

select * from pg_locks;
Run Code Online (Sandbox Code Playgroud)

这似乎给了我一堆列,但是否有可能找到关系,因为我看到其中一个列是关系 oid。

我必须将它链接到哪个表才能获得关系名称?

Chr*_*cki 14

如果您只想要内容pg_locks但具有人类友好的关系名称,

select relation::regclass, * from pg_locks;
Run Code Online (Sandbox Code Playgroud)


Phi*_*der 11

这是 Remy 的查询,针对 Postgres 10 进行了调整:

select nspname, relname, l.* 
from pg_locks l 
    join pg_class c on (relation = c.oid) 
    join pg_namespace nsp on (c.relnamespace = nsp.oid)
where pid in (select pid 
              from pg_stat_activity
              where datname = current_database() 
                and query != current_query());
Run Code Online (Sandbox Code Playgroud)


Rém*_*ron 9

尝试这个 :

select nspname,relname,l.* from pg_locks l join pg_class c on 
 (relation=c.oid) join pg_namespace nsp on (c.relnamespace=nsp.oid) where 
  pid in (select procpid from pg_stat_activity where 
  datname=current_database() and current_query!=current_query())
Run Code Online (Sandbox Code Playgroud)


小智 5

以下命令将给出锁列表:

select t.relname,l.locktype,page,virtualtransaction,pid,mode,granted 
from pg_locks l, pg_stat_all_tables t where l.relation=t.relid
order by relation asc;
Run Code Online (Sandbox Code Playgroud)