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;
我正在尝试查看发生在 我的 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;