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 に答える