View a markdown version of this page

ALTER TABLE - Amazon Aurora DSQL

ALTER TABLE

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

Sintaxe compatível

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 ALTER TABLE ASYNC [ IF EXISTS ] [ ONLY ] name [ * ] VALIDATE CONSTRAINT constraint_name where action is one of: ADD [ COLUMN ] [ IF NOT EXISTS ] column_name data_type [ STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ] DROP [ COLUMN ] [ IF EXISTS ] column_name [ RESTRICT | CASCADE ] ALTER [ COLUMN ] column_name SET DEFAULT expression ALTER [ COLUMN ] column_name DROP DEFAULT ALTER [ COLUMN ] column_name DROP NOT NULL ALTER [ COLUMN ] column_name DROP EXPRESSION [ IF EXISTS ] ALTER [ COLUMN ] column_name ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( sequence_options ) ] ALTER [ COLUMN ] column_name { SET GENERATED { ALWAYS | BY DEFAULT } | SET sequence_option | RESTART [ [ WITH ] restart ] } [...] ALTER [ COLUMN ] column_name DROP IDENTITY [ IF EXISTS ] ALTER [ COLUMN ] column_name SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT } ADD table_constraint NOT VALID ADD table_constraint_using_index DROP CONSTRAINT [ IF EXISTS ] constraint_name [ RESTRICT | CASCADE ] OWNER TO { new_owner | CURRENT_ROLE | CURRENT_USER | SESSION_USER } and table_constraint is: [ CONSTRAINT constraint_name ] CHECK ( expression ) and table_constraint_using_index is: [ CONSTRAINT constraint_name ] UNIQUE USING INDEX index_name

Descrição

ADD [ COLUMN ] [ IF NOT EXISTS ]

Este formulário adiciona uma nova coluna à tabela, usando a mesma sintaxe de CREATE TABLE. Se IF NOT EXISTS for especificado e já existir uma coluna com esse nome, nenhum erro será gerado.

DROP [ COLUMN ] [ IF EXISTS ]

Esse formulário remove uma coluna de uma tabela. Os índices e as restrições de tabela envolvendo a coluna serão automaticamente eliminados, exceto pelas restrições de chave primária. Não há suporte para descartar colunas de chave primária. As estatísticas multivariadas que fazem referência à coluna descartada também serão removidas se a remoção da coluna fizer com que as estatísticas contenham dados de apenas uma única coluna. Você precisará dizer CASCADE se algo fora da tabela depender da coluna, por exemplo, referências de chave estrangeira ou visualizações. Se IF EXISTS for especificado e a coluna não existir, nenhum erro será gerado. Nesse caso, será emitido um aviso em vez disso.

SET/DROP DEFAULT

Esses formulários definem ou removem o valor padrão de uma coluna (a remoção equivale a definir o valor padrão como NULL). O novo valor padrão será aplicado apenas a comandos INSERT ou UPDATE subsequentes; ele não altera as linhas já existentes na tabela.

DROP NOT NULL

Esse formulário altera uma coluna para permitir valores nulos.

DROP EXPRESSION [ IF EXISTS ]

Esse formulário transforma uma coluna gerada armazenada em uma coluna base comum. Os dados existentes na coluna são preservados, mas alterações futuras deixarão de aplicar a expressão de geração. Se DROP EXPRESSION IF EXISTS for especificado e a coluna não for uma coluna gerada, nenhum erro será gerado. Nesse caso, será emitido um aviso em vez disso.

ADD GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY
SET GENERATED { ALWAYS | BY DEFAULT }
DROP IDENTITY [ IF EXISTS ]

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. 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, como INCREMENT BY. Esses formulários alteram a sequência subjacente a uma coluna de identidade existente.

nota

O Amazon Aurora DSQL exige um valor explícito CACHE ao usar ADD GENERATED AS IDENTITY. Além disso, as colunas de identidade são compatíveis apenas com colunas bigint.

Ao usar colunas de identidade, é necessário considerar cuidadosamente o valor do cache. Para ter mais informações, consulte o texto explicativo “Importante” na página CREATE SEQUENCE.

Para obter orientações sobre a melhor forma de usar colunas de identidade com base nos padrões de workload, consulte Trabalhar com sequências e colunas de identidade.

SET STORAGE { PLAIN | EXTERNAL | EXTENDED | MAIN | DEFAULT }

Esse formulário define o modo de armazenamento de uma coluna. Para obter detalhes sobre os modos de armazenamento disponíveis, consulte Modo de armazenamento na página CREATE TABLE.

ADD table_constraint NOT VALID

Esse formulário adiciona uma nova restrição CHECK a uma tabela. No Aurora DSQL, as restrições CHECK adicionadas via ALTER TABLE ADD CONSTRAINT devem usar a opção NOT VALID. O Aurora DSQL cria a restrição, mas não a valida imediatamente em relação aos dados existentes. Isso permite que a restrição seja adicionada sem verificar a tabela inteira. A restrição se aplica imediatamente a todas as novas linhas e atualizações.

Depois de adicionar uma restrição com NOT VALID, use ALTER TABLE ASYNC ... VALIDATE CONSTRAINT para confirmar se os dados existentes também satisfazem a restrição. A validação é executada como um trabalho DDL assíncrono. Você pode monitorar o andamento usando sys.jobs.

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.

VALIDATE CONSTRAINT

Esse formulário valida uma restrição que foi criada anteriormente com a opção NOT VALID. Esse comando é uma operação de DDL assíncrona que não bloqueia outras transações. Ao executar ALTER TABLE ASYNC ... VALIDATE CONSTRAINT, o Aurora DSQL exibe imediatamente um job_id.

Você pode monitorar o status dessa tarefa assíncrona usando a visualização de sistema sys.jobs. Você também pode usar sys.wait_for_job('job_id') para bloquear a sessão atual até que a validação seja concluída ou falhe.

O trabalho de validação examina toda a tabela para verificar se todas as linhas existentes satisfazem a restrição. Depois que a validação é concluída, o Aurora DSQL marca a restrição como válida e o planejador de consultas a aplica para todas as consultas. Se a validação falhar porque as linhas existentes violam a restrição, o trabalho falhará e a restrição permanecerá no estado NOT VALID.

Esse comando valida somente as restrições que você criou com a opção NOT VALID. Tentar validar uma restrição que já é válida resulta em um erro.

DROP CONSTRAINT [ IF EXISTS ]

Esse formulário remove a restrição especificada de uma tabela, juntamente com qualquer índice subjacente à restrição. Se IF EXISTS for especificado e a restrição não existir, nenhum erro será gerado. Nesse caso, será emitido um aviso em vez disso.

OWNER TO

Esse formulário altera o proprietário da tabela para o usuário especificado.

RENAME

Os formulários RENAME alteram o nome de uma tabela, o nome de uma coluna individual de uma tabela ou o nome de uma restrição da tabela. Ao renomear uma restrição que possui um índice subjacente, o índice também é renomeado. Não há impacto sobre os dados armazenados.

SET SCHEMA

Esse formulário move a tabela para outro esquema. Os índices, as restrições e as sequências associados que pertencem às colunas da tabela também são movidos.

Parâmetros

IF EXISTS

Não gere um erro se a tabela não existir. Um aviso é emitido nesse caso.

name

O nome (opcionalmente qualificado pelo esquema) de uma tabela existente a ser alterada. Se ONLY for especificado antes do nome da tabela, somente essa tabela será alterada. Se ONLY não for especificado, a tabela e todas as suas tabelas descendentes (se houver) serão alteradas. Opcionalmente, * pode ser especificado após o nome da tabela para indicar explicitamente que as tabelas descendentes estão incluídas.

column_name

Nome de uma coluna nova ou existente.

new_column_name

Novo nome para uma coluna existente.

new_name

Novo nome da tabela.

data_type

Tipo de dados da nova coluna.

table_constraint

Uma definição de restrição CHECK. No Aurora DSQL, as restrições CHECK devem ser adicionadas com a opção NOT VALID usando ALTER TABLE ADD CONSTRAINT. Consulte CREATE TABLE para obter a sintaxe completa da restrição CHECK.

nome_restrição

Nome de uma restrição nova ou existente.

CASCADE

Remova automaticamente os objetos que dependem da coluna ou restrição removida (por exemplo, exibições que fazem referência à coluna) e, por sua vez, todos os objetos que dependem desses objetos.

RESTRICT

Recuse a remoção da coluna ou restrição se houver objetos dependentes. Esse é o comportamento padrão.

new_owner

O nome de usuário do novo proprietário da tabela.

new_schema

O nome do esquema para o qual a tabela será movida.

Observações

O formulário DROP COLUMN não remove fisicamente a coluna, mas simplesmente a torna invisível para as operações SQL. As operações subsequentes de inserção e atualização na tabela armazenarão um valor nulo para a coluna. Portanto, remover uma coluna é rápido, mas não reduzirá imediatamente o tamanho da tabela no disco, pois o espaço ocupado pela coluna eliminada não é recuperado. O espaço será recuperado ao longo do tempo à medida que as linhas existentes forem atualizadas.

Se uma coluna eliminada for referenciada como uma coluna INCLUDE na chave primária, a definição de chave primária será atualizada para remover a coluna eliminada.

Uma tabela no Aurora DSQL pode ter no máximo 255 colunas ativas ao mesmo tempo e no máximo 1600 colunas durante a vida útil da tabela. Eliminar uma coluna não recupera o respectivo número de atributo. Isso a remove do conjunto de colunas ativas, mas a coluna eliminada continua contando para o limite de 1600 colunas ao longo da vida útil. Para obter mais informações, consulte Limites de banco de dados no Aurora DSQL.