1

我在跑步

select * from pg_lock;

获取具有排他锁的事务。

一旦我知道具有排他锁的事务 id,我如何找出与该事务关联的 sql 查询。

select * from pg_stat_activity;

给我 sql 查询,但不给我事务 id。

有人可以在这里帮助我吗?

4

1 回答 1

2

你需要加入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 版本之间略有不同。

于 2013-03-29T02:00:11.610 回答