

# `ALTER TABLE`
<a name="alter-table-syntax-support"></a>

`ALTER TABLE` altera a definição de uma tabela.

```
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    action [, ... ]
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    RENAME [ COLUMN ] column_name TO new_column_name
ALTER TABLE [ IF EXISTS ] [ ONLY ] name [ * ]
    RENAME CONSTRAINT constraint_name TO new_constraint_name
ALTER TABLE [ IF EXISTS ] name
    RENAME TO new_name
ALTER TABLE [ IF EXISTS ] name
    SET SCHEMA new_schema

where action is one of:

    ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type
    ADD table_constraint_using_index
    ALTER [ COLUMN ] column_name { SET GENERATED { ALWAYS | BY DEFAULT } | SET sequence_option | RESTART [ [ WITH ] restart ] } [...]
    ALTER [ COLUMN ] column_name DROP IDENTITY [ IF EXISTS ]
    OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER }

and table_constraint_using_index is:

    [ CONSTRAINT constraint_name ]
    UNIQUE USING INDEX index_name
```

## Ações da coluna de identidade
<a name="alter-table-identity-columns"></a>

**`SET GENERATED { ALWAYS | BY DEFAULT }` / `SET {{sequence_option}}` / `RESTART`**  
Esses formulários alteram se uma coluna é uma coluna de identidade ou alteram o atributo de geração de uma coluna de identidade existente. Para mais detalhes, consulte [`CREATE TABLE`](create-table-syntax-support.md). De modo semelhante a `SET DEFAULT`, esses formulários afetam apenas o comportamento dos comandos `INSERT` e `UPDATE` subsequentes; eles não fazem com que as linhas que já estão na tabela sejam alteradas.  
É possível usar a opção {{sequence\_option}} com [`ALTER SEQUENCE`](alter-sequence-syntax-support.md), como `INCREMENT BY`. Esses formulários alteram a sequência subjacente a uma coluna de identidade existente.

**`DROP IDENTITY [ IF EXISTS ]`**  
Esse formulário remove a propriedade de identidade de uma coluna. Se `DROP IDENTITY IF EXISTS` for especificado e a coluna não for uma coluna de identidade, nenhum erro será gerado. Nesse caso, será emitido um aviso em vez disso.

## Adicionar ações de restrição
<a name="alter-table-add-constraint"></a>

**`ADD {{table_constraint_using_index}}`**  
Este formulário adiciona uma nova restrição `UNIQUE` a uma tabela com base em um índice exclusivo existente. Todas as colunas do índice serão incluídas na restrição.  
O índice deve estar em um estado `VALID`; não há suporte para adicionar uma restrição exclusiva usando um índice que ainda esteja em construção.  
Se um nome de restrição for fornecido, o índice será renomeado para corresponder ao nome da restrição. Caso contrário, a restrição terá o mesmo nome do índice.  
Após a execução deste comando, o índice passa a ser “propriedade” da restrição, da mesma forma como se tivesse sido criado por um comando `CREATE UNIQUE INDEX ASYNC` regular. Em particular, ao remover a restrição, o índice também será excluído.