명령어/DB

[PostgreSQL] \watch 같은 쿼리를 주기적으로 반복 실행한다

jykim23 2026. 8. 2. 19:49
반응형

설치·접속: PostgreSQL 설치와 접속

부제: 지정한 초 간격으로 쿼리를 다시 돌려 값이 변하는 걸 실시간으로 지켜본다

# psql 안에서 쿼리 끝에 \watch <초> 를 붙인다
# SELECT now()::time AS t, count(*) FROM orders \watch 1
printf 'SELECT now()::time AS t, count(*) AS orders FROM orders \\watch 1\n' | psql -d shop
# Ctrl-C 로 멈춘다
Fri Jul 17 11:59:33 2026 (every 1s)

        t        | orders
-----------------+--------
 11:59:33.138135 |    200
(1 row)

Fri Jul 17 11:59:34 2026 (every 1s)

        t        | orders
-----------------+--------
 11:59:34.139076 |    200
(1 row)

Fri Jul 17 11:59:35 2026 (every 1s)

        t        | orders
-----------------+--------
 11:59:35.140318 |    200
(1 row)

\watch는 직전에 실행한 쿼리(또는 뒤에 이어 붙인 쿼리)를 일정 간격으로 되풀이 실행한다. \watch 1이면 1초마다다. 리눅스의 watch 명령을 psql 안으로 들여온 셈이라, 배치 작업이 진행되며 행 수가 늘어나는지, 커넥션 수나 락 상태가 어떻게 변하는지를 새 쿼리를 계속 치지 않고도 지켜볼 수 있다. 메타명령이라 -c로는 실행되지 않고 대화형 세션이나 표준입력으로 넘겨야 한다. 멈추려면 Ctrl-C.

이렇게도 쓴다

활성 커넥션 수를 5초마다 모니터링한다. (조합: pg_stat_activity)

psql -d shop
# SELECT state, count(*) FROM pg_stat_activity GROUP BY state \watch 5

 

배치가 행을 얼마나 쌓았는지 실시간으로 센다.

psql -d shop
# SELECT count(*) FROM orders \watch 2

 

테이블 용량이 커지는 추이를 지켜본다. (조합: pg_size_pretty)

psql -d shop
# SELECT pg_size_pretty(pg_total_relation_size('orders')) \watch 3

 

대기 중인 락이 풀리는지 감시한다. (조합: pg_locks)

psql -d shop
# SELECT count(*) FROM pg_locks WHERE NOT granted \watch 1

 

셸에서 정해진 시간만 돌리고 자동으로 끊는다. (조합: timeout)

printf 'SELECT count(*) FROM orders \\watch 1\n' | timeout 10 psql -d shop
반응형