我在跑步
select * from pg_lock;
获取具有排他锁的事务。
一旦我知道具有排他锁的事务 id,我如何找出与该事务关联的 sql 查询。
select * from pg_stat_activity;
给我 sql 查询,但不给我事务 id。
有人可以在这里帮助我吗?
我在跑步
select * from pg_lock;
获取具有排他锁的事务。
一旦我知道具有排他锁的事务 id,我如何找出与该事务关联的 sql 查询。
select * from pg_stat_activity;
给我 sql 查询,但不给我事务 id。
有人可以在这里帮助我吗?
你需要加入pid。
-- For PostgreSQL 9.1
select l.pid, l.mode, sa.procpid, sa.current_query
from pg_locks l
inner join pg_stat_activity sa
on l.pid = sa.procpid
where l.mode like '%xclusive%';
-- For PostgreSQL 9.2
select l.pid, l.mode, sa.pid, sa.query
from pg_locks l
inner join pg_stat_activity sa
on l.pid = sa.pid
where l.mode like '%xclusive%';
pid 列可以连接到 pg_stat_activity 视图的 pid 列,以获取有关会话持有或等待持有每个锁的更多信息。此外,如果您使用准备好的事务,可以将事务列连接到 pg_prepared_xacts 视图的事务列,以获取有关持有锁的准备事务的更多信息。(准备好的事务永远不会等待锁,但它会继续持有它在运行时获得的锁。)
可用的列和列名在 9.1 和 9.2 版本之间略有不同。