2013-03-29 29 views
0

SQL查詢我運行Postgres的 - 找出從事務ID

select * from pg_lock; 

獲得具有排它鎖交易。

一旦我知道具有獨佔鎖定的事務ID,我如何才能找出與該事務相關的SQL查詢。

select * from pg_stat_activity; 

給我sql查詢但不是事務ID。

有人可以幫我嗎?

回答

1

您需要加入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視圖的事務列中,以獲取有關保留鎖定的已準備事務的更多信息。 (準備好的事務不能等待一個鎖,但它繼續持有它收購了,同時運行的鎖。)

Source

列可用,列名9.1版本和9.2之間略有不同。