select pid,
usename,
application_name,
pg_blocking_pids(pid) as blocked_by,
query as blocked_query,
backend_start,
query_start,
backend_type
from pg_stat_activity
where cardinality(pg_blocking_pids(pid)) > 0;
pid (=프로세스 ID)
를 모두 terminate
시키면 됩니다.application_name
도 한번 확인하면서 지울 타겟을 지정하는 걸 추천합니다.lock
을 걸 수 밖에 없는 경우가 있어서 그렇습니다.application_name 신경쓰지 않고 한방에 다 Lock 걸린 애들을 Terminate 시키려면
아래와 같은 방법을 사용합니다.
SELECT pg_cancel_backend(a.pid), pg_terminate_backend(a.pid)
FROM( select pid
from pg_stat_activity
where cardinality(pg_blocking_pids(pid)) > 0) a
where a.pid <> pg_backend_pid() -- 자기 connection 은 끊지 않기
SELECT
pg_cancel_backend(pid), -- 해당 PID만 중지
pg_terminate_backend(pid) -- 혹시 모르니, PID와 연계된 모든 상위 쿼리 프로세스도 종료
FROM pg_stat_activity
where
pid <> pg_backend_pid() -- 현재 이 쿼리르 돌리는 session 의 pid 는 끊지 않음
and backend_type = 'client backend' -- 내부적으로 사용되는 pid 는 죽이지 않기 위함
and pid in (1826,5123,5132,61112) -- 여기서 죽이고 싶은 pid 를 지정!