> ## 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.

# Desinstalando Extensões

> Remova extensões do VillageSQL com segurança

## Sintaxe do Comando

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

Quando `VERSION` é fornecido, o servidor o compara com a versão da extensão
instalada e aborta se forem diferentes. Omita a cláusula para desinstalar
qualquer que seja a versão atualmente instalada.

<Warning>
  Você deve remover todas as colunas, parâmetros de stored procedure e variáveis DECLARE que usam tipos da extensão antes de desinstalá-la. O processo de desinstalação removerá então todas as funções e tipos fornecidos pela extensão.
</Warning>

## Pré-requisitos

* Acesso administrativo ao VillageSQL
* Nenhuma tabela usando tipos personalizados da extensão
* Nenhuma stored procedure com parâmetros ou variáveis DECLARE usando tipos personalizados da extensão
* Backup dos dados caso a extensão armazene dados personalizados

## Etapas de Desinstalação

### 1. Tentar Desinstalar

Execute o comando de desinstalação. Se a extensão não tiver dependências, ele terá sucesso imediatamente.
Se houver colunas que dependam dela, a mensagem de erro identifica exatamente quais:

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

**Se a extensão tiver dependências de coluna**, você verá um erro como:

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

Remova ou altere a(s) coluna(s) identificada(s) e tente novamente:

```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;
```

**Se uma stored procedure usar um tipo personalizado da extensão**, você verá um erro como:

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

Remova ou altere a stored procedure para eliminar o parâmetro ou variável tipada e tente novamente:

```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. Desinstalar a Extensão

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

Para se proteger contra a desinstalação de uma versão inesperada (útil em CI ou após
uma atualização gradual), inclua a cláusula `VERSION`:

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

Se `1.2.0` não for a versão instalada, o servidor retorna um erro e mantém
a extensão no lugar:

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

**O que isto remove:**

* ✅ Todas as VDFs (funções) fornecidas pela extensão
* ✅ Definições de tipos personalizados registradas pela extensão
* ✅ Registro de cadastro da extensão
* ✅ Metadados de colunas personalizadas da extensão
* ✅ Variáveis de sistema persistidas (`SET PERSIST`) da extensão em `mysqld-auto.cnf`

**O que isto NÃO remove:**

* ❌ O arquivo `.veb` permanece em `veb_dir`
* ❌ Diretórios expandidos em `{datadir}/.veb_expansion_cache/` permanecem temporariamente
* ❌ Dados de tabela (você deve primeiro remover as tabelas com tipos personalizados)

<Note>
  Os diretórios de expansão em `{datadir}/.veb_expansion_cache/{extension}/{sha256}/` são limpos automaticamente na reinicialização do servidor.
</Note>

<Note>
  `UNINSTALL EXTENSION` também remove quaisquer variáveis de sistema persistidas pertencentes à
  extensão em `mysqld-auto.cnf`. Se você executou anteriormente
  `SET PERSIST extensionname.varname = value`, essa entrada é excluída automaticamente
  durante a desinstalação. Valores persistidos **não** são removidos durante o desligamento do servidor —
  eles sobrevivem a um ciclo de reinicialização para que a extensão possa lê-los no próximo carregamento.
</Note>

<Note>
  Desinstalar uma extensão que tem uma mudança de versão pendente (um
  `ALTER EXTENSION name VERSION 'x' AT RESTART` enfileirado) descarta essa ação pendente
  junto com a linha da extensão — não há estado pendente órfão para limpar,
  e nenhum erro. Um `INSTALL EXTENSION` posterior começa do zero sem nenhuma ação
  pendente. Consulte [Gerenciando Extensões](/docs/pt-BR/mysql-8.4/0.0.5/managing) para saber como
  as mudanças de versão pendentes são rastreadas e limpas.
</Note>

### 3. Verificar a Desinstalação

```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
```

## Erros Comuns

| Erro                                                                                           | Causa                                                                                             | Solução                                                                                                                   |
| ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| `Cannot drop extension \`name\` as N column(s) depend on it, e.g. db.table.col has type TYPE\` | Tabelas têm colunas usando os tipos personalizados da extensão                                    | Remova ou altere as colunas identificadas e tente novamente                                                               |
| `Cannot uninstall extension 'name': stored procedure db.sp uses custom type TYPE`              | Uma stored procedure tem um parâmetro ou variável DECLARE usando o tipo personalizado da extensão | Remova ou altere a stored procedure para eliminar o uso do tipo personalizado e tente novamente                           |
| `Cannot uninstall extension 'name': installed version is 'X' but VERSION 'Y' was specified`    | A cláusula `VERSION` foi especificada, mas não corresponde à versão instalada                     | Execute novamente sem `VERSION`, ou use a versão exibida em `SELECT EXTENSION_VERSION FROM INFORMATION_SCHEMA.EXTENSIONS` |
| `Extension not found`                                                                          | Extensão não instalada                                                                            | Verifique com `SELECT * FROM INFORMATION_SCHEMA.EXTENSIONS`                                                               |

## Opcional: Remover o Arquivo .veb

O arquivo `.veb` permanece após a desinstalação. Para removê-lo completamente:

```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>
  O arquivo .veb pode ser mantido com segurança para reinstalação futura. Removê-lo não afeta o desempenho do servidor.
</Note>

## Reinstalando

Para reinstalar uma extensão, use `INSTALL EXTENSION` novamente (se o arquivo .veb ainda existir):

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

Consulte [Instalando Extensões](/docs/pt-BR/mysql-8.4/0.0.5/install) para detalhes.

## Próximas Etapas

<CardGroup cols={2}>
  <Card title="Instalando Extensões" icon="download" href="/docs/pt-BR/mysql-8.4/0.0.5/install">
    Adicione extensões de volta se necessário
  </Card>

  <Card title="Gerenciando Extensões" icon="sliders" href="/docs/pt-BR/mysql-8.4/0.0.5/managing">
    Monitore e solucione problemas de extensões
  </Card>

  <Card title="Referência do Sistema" icon="book" href="/docs/pt-BR/mysql-8.4/0.0.5/reference">
    Consulte tabelas do sistema
  </Card>
</CardGroup>
