

 Amazon Redshift는 패치 198부터 새 Python UDF 생성을 더 이상 지원하지 않습니다. 기존 Python UDF는 2026년 6월 30일까지 계속 작동합니다. 자세한 내용은 [블로그 게시물](https://aws.amazon.com/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)을 참조하세요.

# CANCEL
<a name="r_CANCEL"></a>

현재 실행 중인 데이터베이스 쿼리를 취소합니다.

CANCEL 명령은 실행 중인 쿼리의 프로세스 ID 또는 세션 ID가 필요하고 쿼리가 취소되었는지 검증하기 위한 확인 메시지를 표시합니다.

## 필수 권한
<a name="r_CANCEL-privileges"></a>

CANCEL에 필요한 권한은 다음과 같습니다.
+ 자신의 쿼리를 취소하는 슈퍼 사용자
+ 사용자의 쿼리를 취소하는 슈퍼 사용자
+ 사용자의 쿼리를 취소하는 CANCEL 권한이 있는 사용자
+ 자신의 쿼리를 취소하는 사용자

## 구문
<a name="r_CANCEL-synopsis"></a>

```
CANCEL process_id [ 'message' ]
```

## 파라미터
<a name="r_CANCEL-parameters"></a>

 *process\$1id*   
Amazon Redshift 클러스터에서 실행 중인 쿼리를 취소하려면 취소하려는 쿼리에 해당하는 [STV\$1RECENTS](r_STV_RECENTS.md)에서 `pid`(프로세스 ID)를 사용합니다.  
Amazon Redshift Serverless 작업 그룹에서 실행 중인 쿼리를 취소하려면 취소하려는 쿼리에 해당하는 [SYS\$1QUERY\$1HISTORY](SYS_QUERY_HISTORY.md)에서 `session_id`(프로세스 ID)를 사용합니다.

'*message*'  
쿼리 취소 완료 시 표시되는 선택적 확인 메시지입니다. 메시지를 지정하지 않을 경우 Amazon Redshift는 기본 메시지를 확인으로 표시합니다. 이 메시지는 작은따옴표로 묶어야 합니다.

## 사용 노트
<a name="r_CANCEL-usage-notes"></a>

*쿼리 ID*를 지정해서는 쿼리를 취소할 수 없습니다. 반드시 쿼리의 *프로세스 ID*(PID) 또는 *세션 ID*를 지정해야 합니다. 사용자가 현재 실행하고 있는 쿼리만 취소할 수 있습니다. 수퍼유저는 모든 쿼리를 취소할 수 있습니다.

여러 세션의 쿼리가 동일한 테이블에 대한 잠금을 보유하는 경우 [PG\$1TERMINATE\$1BACKEND](PG_TERMINATE_BACKEND.md) 함수를 사용하여 세션 중 하나를 종료할 수 있습니다. 그러면 종료된 세션에서 실행 중이던 트랜잭션이 모든 잠금을 강제로 해제하여 트랜잭션을 롤백시킵니다. 현재 보유한 잠금을 보려면 [STV\$1LOCKS](r_STV_LOCKS.md) 시스템 테이블을 쿼리합니다.

Amazon Redshift는 특정한 내부 이벤트 이후에 활성 세션을 다시 시작하고 새 PID를 할당할 수도 있습니다. PID가 변경된 경우 다음 오류 메시지가 나타날 수 있습니다.

```
Session <PID> does not exist. The session PID might have changed. Check the stl_restarted_sessions system table for details.
```

새 PID를 찾으려면 [STL\$1RESTARTED\$1SESSIONS](r_STL_RESTARTED_SESSIONS.md) 시스템 테이블을 쿼리하고 `oldpid` 열에서 필터링하세요.

```
select oldpid, newpid from stl_restarted_sessions where oldpid = 1234;
```

## 예제
<a name="r_CANCEL-examples"></a>

Amazon Redshift 클러스터에서 현재 실행 중인 쿼리를 취소하려면 먼저 취소하려는 쿼리에 대한 프로세스 ID를 검색합니다. 현재 실행 중인 모든 쿼리의 프로세스 ID를 확인하려면 다음 명령을 입력하세요.

```
select pid, starttime, duration,
trim(user_name) as user,
trim (query) as querytxt
from stv_recents
where status = 'Running';

pid |         starttime          | duration |   user   |    querytxt
-----+----------------------------+----------+----------+-----------------
802 | 2008-10-14 09:19:03.550885 |      132 | dwuser | select
venuename from venue where venuestate='FL', where venuecity not in
('Miami' , 'Orlando');
834 | 2008-10-14 08:33:49.473585 |  1250414 | dwuser | select *
from listing;
964 | 2008-10-14 08:30:43.290527 |   326179 | dwuser | select
sellerid from sales where qtysold in (8, 10);
```

쿼리 텍스트를 확인하여 어떤 프로세스 ID(PID)가 취소하려는 쿼리에 해당하는지 확인합니다.

다음 명령을 입력해 PID 802를 사용하여 해당 쿼리를 취소합니다.

```
cancel 802;
```

쿼리가 실행 중이던 세션에서 다음 메시지를 표시합니다.

```
ERROR:  Query (168) cancelled on user's request
```

여기에서 `168`은 쿼리 ID입니다(쿼리 취소에 사용되는 프로세스 ID가 아님).

또는 기본 메시지 대신 표시할 사용자 지정 확인 메시지를 지정할 수 있습니다. 사용자 지정 메시지를 지정하려면 CANCEL 명령의 끝에 메시지를 작은따옴표로 묶습니다.

```
cancel 802 'Long-running query';
```

쿼리가 실행 중이던 세션에서 다음 메시지를 표시합니다.

```
ERROR:  Long-running query
```