psqlプロセスのロック状態 (pg_locks, pg_stat_activity)
[概要]
コマンドラインからpsqlでDBに繋いだ場合、
pg_locks, pg_stat_activityではどのように表示されるか?
[詳細]
□ターミナル1
$ psql template1 template1=# select * from pg_locks; relation | database | transaction | pid | mode | granted ----------+----------+-------------+------+-----------------+--------- 16839 | 1 | | 3357 | AccessShareLock | t | | 3958940 | 3357 | ExclusiveLock | t (2 rows) template1=# select * from pg_stat_activity; datid | datname | procpid | usesysid | usename | current_query | query_start -----------+---------------+---------+----------+----------+------------------------------+------------- 1 | template1 | 3357 | 1 | postgres | <command string not enabled> | (1 rows)
□ターミナル2
プロセスIDを表示する
$ ps aux | grep "psql template1" | awk '{print $2}' 3357
■まとめ
psql で接続したプロセスは、
pg_locksには、AccessShareLock/ExclusiveLockのセットで表示される。
pg_stat_activityにも表示されるが、今回確認した環境では、current_query(query_start)が表示されない。
pg_stat_activityのcurrent_queryが表示されない件については次に説明する。