PostgreSQL找到包括表名的锁

时间:2016-05-09 07:39:05

标签: relational-database postgresql-9.2 database-administration

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

我看到有一个叫做pg_locks

的表
select * from pg_locks;

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

我必须将哪个表链接到以获取关系名称?

5 个答案:

答案 0 :(得分:1)

试试这个:

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

答案 1 :(得分:1)

Remy Baron的回答是正确的我只是想发一个我上来的 还有,因为它更具体到我在这种情况下需要的东西

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

答案 2 :(得分:1)

这是雷米的查询,已针对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());

答案 3 :(得分:0)

以下命令将提供锁定列表:

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;

答案 4 :(得分:0)

如果您只想要 pg_locks 的内容,但需要一个人性化的关系名称,

select relation::regclass, * from pg_locks;