PG_CANCEL_BACKEND
쿼리를 취소합니다. PG_CANCEL_BACKEND는 기능 면에서 CANCEL 명령과 동일합니다. 사용자가 현재 실행하고 있는 쿼리를 취소할 수 있습니다. 수퍼유저는 어떠한 쿼리든 취소할 수 있습니다.
구문
pg_cancel_backend( pid )
인수
- pid
-
취소할 쿼리의 프로세스 ID(PID)입니다. 쿼리 ID를 지정해서는 쿼리를 취소할 수 없습니다. 반드시 쿼리의 프로세스 ID를 지정해야 합니다.
INTEGER
값이 필요합니다.
반환 타입
None
사용 노트
다수의 세션에서 동일한 테이블에 대해 쿼리를 실행하면서 잠금 현상이 발생하는 경우에는 PG_TERMINATE_BACKEND 함수를 사용해 세션 중 하나를 종료할 수 있습니다. 그러면 종료된 세션에서 실행 중이던 트랜잭션이 모든 잠금을 강제로 해제하여 트랜잭션을 롤백시킵니다. PG__LOCKS 카탈로그 테이블에 대해 쿼리를 실행하여 현재 잠금 상태를 확인합니다. 쿼리가 트랜잭션 블록(BEGIN ... END) 내부여서 취소할 수 없는 경우에는 PG_TERMINATE_BACKEND 함수를 사용하여 쿼리가 실행 중인 세션을 종료할 수 있습니다.
예시
현재 실행 중인 쿼리를 취소하려면 먼저 취소하려는 쿼리에 대한 프로세스 ID를 검색하십시오. 현재 실행 중인 모든 쿼리의 프로세스 ID를 확인하려면 다음 명령을 실행합니다.
SELECT pid, TRIM(starttime) AS start, duration, TRIM(user_name) AS user, SUBSTRING(query,1,40) AS querytxt FROM stv_recents WHERE status = 'Running';
+-----+------------------------+----------+--------+-----------------------------+ | pid | starttime | duration | user | querytxt | +-----+------------------------+----------+--------+-----------------------------+ | 802 | 2013-10-14 09:19:03.55 | 132 | dwuser | select venuename from venue | | 834 | 2013-10-14 08:33:49.47 | 1250414 | dwuser | select * from listing; | | 964 | 2013-10-14 08:30:43.29 | 326179 | dwuser | select sellerid from sales | +-----+------------------------+----------+--------+-----------------------------+
프로세스 ID 802로 쿼리를 취소하려면 다음 예제를 사용합니다.
SELECT PG_CANCEL_BACKEND(802);