PostgreSQL 查找包括 table 名称的锁

PostgreSQL find locks including the table name

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

我看到有一个 table 叫做 pg_locks

select * from pg_locks;

这似乎给了我一堆专栏,但有可能吗 找到关系,因为我看到其中一列是 关系oid.

我必须 link 什么 table 才能获得关系名称?

试试这个:

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())

Remy Baron 的回答是正确的我只是想post一个我想出来的 也只是因为它更符合我在这种情况下的需要

select pg_class.relname,
       pg_locks.mode
from pg_class,
     pg_locks
where pg_class.oid = pg_locks.relation
and pg_class.relnamespace >= 2200
;

下面的命令将给出锁的列表:

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;

这是 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());

如果您只想要 pg_locks 的内容但具有人性化的关系名称,

select relation::regclass, * from pg_locks;