> ## Documentation Index
> Fetch the complete documentation index at: https://villagesql.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 확장 프로그램 제거

> VillageSQL 확장 프로그램을 안전하게 제거합니다

## 명령 구문

```sql theme={null}
UNINSTALL EXTENSION extension_name [VERSION 'version'];
```

`VERSION`이 제공되면 서버가 설치된 확장 프로그램의 버전과 비교하고, 서로 다를 경우 중단합니다. 해당 절을 생략하면 현재 설치된 버전을 제거합니다.

<Warning>
  확장 프로그램을 제거하기 전에, 확장 프로그램에서 제공하는 유형을 사용하는 모든 열, 저장 프로시저 매개변수 및 DECLARE 변수를 제거해야 합니다. 제거 프로세스는 확장 프로그램이 제공하는 모든 함수와 유형을 제거합니다.
</Warning>

## 사전 요구 사항

* VillageSQL에 관리자 액세스 권한
* 확장 프로그램의 사용자 정의 유형을 사용하는 테이블 없음
* 확장 프로그램의 사용자 정의 유형을 사용하는 저장 프로시저 매개변수 또는 DECLARE 변수 없음
* 확장 프로그램이 사용자 정의 데이터를 저장하는 경우 데이터 백업

## 제거 단계

### 1. 제거 시도

제거 명령을 실행합니다. 확장 프로그램에 의존성이 없으면 즉시 성공합니다. 확장 프로그램에 의존하는 열이 있는 경우 오류 메시지에서 정확히 어떤 열이 영향을 받는지 표시합니다:

```sql theme={null}
UNINSTALL EXTENSION vsql_complex;
```

**확장 프로그램에 열 의존성이 있는 경우**, 다음과 같은 오류가 표시됩니다:

```
ERROR HY000: Cannot drop extension `vsql_complex` as 1 column(s) depend on it,
e.g. mydb.signals.impedance has type COMPLEX
```

식별된 열을 삭제하거나 수정한 후 다시 시도합니다:

```sql theme={null}
-- Option 1: Drop the table
DROP TABLE mydb.signals;

-- Option 2: Alter to remove only the custom type column
ALTER TABLE mydb.signals DROP COLUMN impedance;
```

**저장 프로시저가 확장 프로그램의 사용자 정의 유형을 사용하는 경우**, 다음과 같은 오류가 표시됩니다:

```
ERROR 3219 (HY000): Cannot uninstall extension 'vsql_complex': stored procedure mydb.transform_signal uses custom type COMPLEX
```

사용자 정의 유형이 지정된 매개변수 또는 변수를 제거한 뒤 저장 프로시저를 삭제하거나 수정하고 다시 시도합니다:

```sql theme={null}
-- Option 1: Drop the stored procedure
DROP PROCEDURE mydb.transform_signal;

-- Option 2: Recreate the procedure without the custom type parameter
-- (replace the custom type with a compatible built-in type or remove the parameter)
```

### 2. 확장 프로그램 제거

```sql theme={null}
UNINSTALL EXTENSION vsql_complex;
```

CI 환경 또는 롤링 업그레이드 후에 예상치 못한 버전을 제거하는 것을 방지하기 위해 `VERSION` 절을 포함할 수 있습니다:

```sql theme={null}
UNINSTALL EXTENSION vsql_complex VERSION '1.2.0';
```

`1.2.0`이 설치된 버전이 아니면 서버는 오류를 반환하고 확장 프로그램을 설치된 상태로 유지합니다:

```
ERROR 3219 (HY000): Cannot uninstall extension 'vsql_complex': installed
version is '0.0.1' but VERSION '1.2.0' was specified
```

**제거되는 내용:**

* ✅ 확장 프로그램이 제공하는 모든 VDF(함수)
* ✅ 확장 프로그램이 등록한 사용자 정의 유형 정의
* ✅ 확장 프로그램 등록 기록
* ✅ 확장 프로그램에 대한 사용자 정의 열 메타데이터
* ✅ `mysqld-auto.cnf`에서 확장 프로그램의 영구 시스템 변수(`SET PERSIST`)

**제거되지 않는 내용:**

* ❌ `.veb` 파일은 `veb_dir`에 그대로 남아 있습니다
* ❌ `{datadir}/.veb_expansion_cache/` 내 확장된 디렉터리는 일시적으로 남아 있습니다
* ❌ 테이블 데이터(사용자 정의 유형을 사용하는 테이블을 먼저 삭제해야 합니다)

<Note>
  `{datadir}/.veb_expansion_cache/{extension}/{sha256}/` 내 확장 디렉터리는 서버 재시작 시 자동으로 정리됩니다.
</Note>

<Note>
  `UNINSTALL EXTENSION`은 `mysqld-auto.cnf`에서 확장 프로그램에 속하는 모든 영구 시스템 변수도 제거합니다. 이전에 `SET PERSIST extensionname.varname = value`를 실행한 경우, 제거 중에 해당 항목이 자동으로 삭제됩니다. 영구 값은 서버 종료 중에 제거되지 않습니다 — 재시작 주기 동안 유지되어 확장 프로그램이 다음 로드 시 읽을 수 있습니다.
</Note>

### 3. 제거 확인

```sql theme={null}
-- Check extension is gone
SELECT * FROM INFORMATION_SCHEMA.EXTENSIONS WHERE EXTENSION_NAME = 'vsql_complex';
-- Should return no rows

-- Verify functions removed
SELECT complex_abs('(1.0,2.0)');
-- Error: FUNCTION test_db.complex_abs does not exist
```

## 일반적인 오류

| 오류                                                                                             | 원인                                                         | 해결 방법                                                                                               |
| ---------------------------------------------------------------------------------------------- | ---------------------------------------------------------- | --------------------------------------------------------------------------------------------------- |
| `Cannot drop extension \`name\` as N column(s) depend on it, e.g. db.table.col has type TYPE\` | 확장 프로그램의 사용자 정의 유형을 사용하는 테이블의 열이 존재합니다                     | 식별된 열을 삭제하거나 수정한 후 다시 시도                                                                            |
| `Cannot uninstall extension 'name': stored procedure db.sp uses custom type TYPE`              | 저장 프로시저가 확장 프로그램의 사용자 정의 유형을 사용하는 매개변수 또는 DECLARE 변수를 가집니다 | 사용자 정의 유형 사용을 제거한 후 저장 프로시저를 삭제하거나 수정한 후 다시 시도                                                      |
| `Cannot uninstall extension 'name': installed version is 'X' but VERSION 'Y' was specified`    | `VERSION` 절이 지정되었으나 설치된 버전과 일치하지 않습니다                      | `VERSION`을 생략하거나 `SELECT EXTENSION_VERSION FROM INFORMATION_SCHEMA.EXTENSIONS`에서 표시된 버전을 사용하여 다시 실행 |
| `Extension not found`                                                                          | 확장 프로그램이 설치되지 않았습니다                                        | `SELECT * FROM INFORMATION_SCHEMA.EXTENSIONS`로 확인                                                   |

## 선택 사항: .veb 파일 제거

제거 후 `.veb` 파일이 남아 있습니다. 완전히 제거하려면:

```bash theme={null}
# Find veb_dir
mysql -u root -p -e "SHOW VARIABLES LIKE 'veb_dir';"

# Delete .veb file
sudo rm /path/to/veb_dir/vsql_complex.veb
```

<Note>
  `.veb` 파일은 향후 재설치를 위해 안전하게 유지할 수 있습니다. 삭제해도 서버 성능에 영향을 주지 않습니다.
</Note>

## 재설치

확장 프로그램을 재설치하려면 `.veb` 파일이 여전히 존재하는 경우 `INSTALL EXTENSION`을 다시 사용합니다:

```sql theme={null}
INSTALL EXTENSION vsql_complex;
```

자세한 내용은 [확장 프로그램 설치](/docs/ko/mysql-8.4/0.0.4/install)를 참조하세요.

## 다음 단계

<CardGroup cols={2}>
  <Card title="확장 프로그램 설치" icon="download" href="/docs/ko/mysql-8.4/0.0.4/install">
    필요 시 확장 프로그램 다시 추가
  </Card>

  <Card title="확장 프로그램 관리" icon="sliders" href="/docs/ko/mysql-8.4/0.0.4/managing">
    확장 프로그램 모니터링 및 문제 해결
  </Card>

  <Card title="시스템 참조" icon="book" href="/docs/ko/mysql-8.4/0.0.4/reference">
    시스템 테이블 쿼리
  </Card>
</CardGroup>
