我试图看看正在发生的锁定 我的PostgreSQL数据库中的特定表。
我看到有一个叫做pg_locks
的表select * from pg_locks;
这似乎给了我一堆专栏但是有可能 找到关系,因为我看到其中一列是 关系oid。
我必须将哪个表链接到以获取关系名称?
答案 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;