

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

`ALTER TABLE` cambia la definición de una tabla.

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

## Acciones de la columna de identidad
<a name="alter-table-identity-columns"></a>

**`SET GENERATED { ALWAYS | BY DEFAULT }` / `SET {{sequence_option}}` / `RESTART`**  
Estos formularios cambian si una columna es una columna de identidad o cambian el atributo de generación de una columna de identidad existente. Para obtener más información, consulte [`CREATE TABLE`](create-table-syntax-support.md). Al igual que `SET DEFAULT`, estos formularios solo afectan al comportamiento de los comandos `INSERT` y `UPDATE` posteriores; no provocan cambios en las filas que ya se encuentran en la tabla.  
La opción {{sequence\_option}} es una opción compatible con [`ALTER SEQUENCE`](alter-sequence-syntax-support.md) como `INCREMENT BY`. Estos formularios modifican la secuencia que subyace a una columna de identidad existente.

**`DROP IDENTITY [ IF EXISTS ]`**  
Este formulario elimina la propiedad de identidad de una columna. Si se especifica `DROP IDENTITY IF EXISTS` y la columna no es una columna de identidad, no se genera ningún error. En este caso, se emite un aviso en su lugar.

## Agregación de acciones de restricción
<a name="alter-table-add-constraint"></a>

**`ADD {{table_constraint_using_index}}`**  
Este formulario agrega una nueva restricción `UNIQUE` a una tabla en función de un índice único existente. Todas las columnas del índice se incluirán en la restricción.  
El índice debe estar en un estado `VALID`; no se admite agregar una restricción única mediante un índice mientras el índice se está creando actualmente.  
Si se proporciona un nombre de restricción, se cambiará el nombre del índice para que coincida con el nombre de la restricción. De lo contrario, la restricción tendrá el mismo nombre que el índice.  
Tras ejecutar este comando, el índice pasa a ser propiedad de la restricción, del mismo modo que si el índice lo hubiera creado un comando `CREATE UNIQUE INDEX ASYNC` normal. En concreto, si se elimina la restricción, el índice también desaparecerá.