ALTER TABLE [ ONLY ] tabela [ * ] ADD [ COLUMN ] coluna tipo [ restrição_de_coluna [ ... ] ] ALTER TABLE [ ONLY ] tabela [ * ] ALTER [ COLUMN ] coluna { SET DEFAULT valor | DROP DEFAULT } ALTER TABLE [ ONLY ] tabela [ * ] ALTER [ COLUMN ] coluna SET STATISTICS inteiro ALTER TABLE [ ONLY ] tabela [ * ] RENAME [ COLUMN ] coluna TO novo_nome_da_coluna ALTER TABLE tabela RENAME TO novo_nome_da_tabela ALTER TABLE tabela ADD definição_de_restrição_de_tabela ALTER TABLE [ ONLY ] tabela DROP CONSTRAINT restrição { RESTRICT | CASCADE } ALTER TABLE tabela OWNER TO novo_dono
O nome da tabela existente a ser alterada.
O nome de uma coluna nova ou existente.
O tipo da nova coluna.
O novo nome para a coluna existente.
O novo nome para a tabela.
A nova restrição de tabela (table constraint) para a tabela.
O nome de usuário do novo dono da tabela.
O comando ALTER TABLE altera a definição de uma tabela existente. A forma ADD COLUMN adiciona uma nova coluna na tabela utilizando a mesma sintaxe de CREATE TABLE. A forma ALTER COLUMN SET/DROP DEFAULT permite definir ou remover o valor padrão para a coluna. Note que o valor padrão somente se aplica aos próximos comandos INSERT; as linhas existentes na tabela não são modificadas. A forma ALTER COLUMN SET STATISTICS permite controlar a coleta de estatísticas para as operações ANALYZE posteriores. A cláusula RENAME faz com que o nome da tabela, coluna, índice ou seqüência seja mudado sem que os dados sejam modificados. Os dados permanecem do mesmo tipo e tamanho após o comando ser executado. A cláusula ADD definição_de_restrição_de_tabela adiciona uma nova restrição de tabela utilizando a mesma sintaxe de CREATE TABLE. A cláusula DROP CONSTRAINT restrição elimina todas as restrições da tabela (e de suas descendentes) que correspondam à restrição. A cláusula OWNER muda o dono da tabela para o usuário novo_dono.
Somente o dono da tabela pode modificar seu esquema.
A palavra chave COLUMN é informativa podendo ser omitida.
Na atual implementação de ADD COLUMN, as cláusulas valor padrão e NOT NULL não são suportadas para a nova coluna. Pode ser usada a forma SET DEFAULT do comando ALTER TABLE para definir o valor padrão mais tarde. (Os valores atuais das linhas existentes poderão ser atualizados, posteriormente, para o novo valor padrão usando o comando UPDATE.)
Em DROP CONSTRAINT a palavra chave RESTRICT é requerida, embora as dependências ainda não sejam verificadas. A opção CASCADE não é suportada. Atualmente DROP CONSTRAINT remove somente as restrições CHECK. Para remover as restrições PRIMARY ou UNIQUE deve ser removido o índice correspondente utilizando o comando DROP INDEX. Para remover uma FOREIGN KEY é necessário recriar e recarregar a tabela usando outros parâmetros no comando CREATE TABLE.
Por exemplo, para remover todas as restrições da tabela distribuidores:
CREATE TABLE temp AS SELECT * FROM distribuidores; DROP TABLE distribuidores; CREATE TABLE distribuidores AS SELECT * FROM temp; DROP TABLE temp;
Somente o dono da tabela pode alterá-la. Mudar qualquer parte do esquema do catálogo do sistema não é permitido. O manual Guia do Usuário do PostgreSQL possui mais informações sobre herança.
Consulte o comando CREATE TABLE para obter uma descrição mais detalhada dos argumentos válidos.
Para adicionar uma coluna do tipo VARCHAR à tabela:
ALTER TABLE distribuidores ADD COLUMN endereco VARCHAR(30);
Para mudar o nome de uma coluna existente:
ALTER TABLE distribuidores RENAME COLUMN endereco TO cidade;
Para mudar o nome de uma tabela existente:
ALTER TABLE distribuidores RENAME TO fornecedores;
Para adicionar uma restrição de verificação (CHECK) a uma tabela:
ALTER TABLE distribuidores ADD CONSTRAINT cep_chk CHECK (char_length(cod_cep) = 8);
Para remover uma restrição de verificação de uma tabela e de todas as suas filhas:
ALTER TABLE distribuidores DROP CONSTRAINT cepchk RESTRICT;
Para adicionar uma chave estrangeira a uma tabela:
ALTER TABLE distribuidores ADD CONSTRAINT fk_dist FOREIGN KEY (endereco) REFERENCES enderecos(endereco) MATCH FULL;
Para adicionar uma restrição de unicidade (multi-coluna) à tabela:
ALTER TABLE distribuidores ADD CONSTRAINT dist_id_cep_key UNIQUE (dist_id, cep);
Para adicionar uma restrição de chave primária a uma tabela com o nome gerado automaticamente, observando-se que a tabela somente pode possuir uma única chave primária:
ALTER TABLE distribuidores ADD PRIMARY KEY (dist_id);
A forma ADD COLUMN está em conformidade, a não ser por não suportar valor padrão e NOT NULL, conforme foi explicado anteriormente. A forma ALTER COLUMN está em conformidade total.
O SQL92 especifica algumas funcionalidades adicionais para o comando ALTER TABLE que ainda não são diretamente suportadas pelo PostgreSQL:
ALTER TABLE tabela DROP [ COLUMN ] coluna { RESTRICT | CASCADE }
Remove a coluna da tabela. Na implementação atual, para remover uma coluna existente a tabela deve ser recriada e recarregada:
CREATE TABLE temp AS SELECT did, cidade FROM distribuidores; DROP TABLE distribuidores; CREATE TABLE distribuidores ( did DECIMAL(3) DEFAULT 1, cidade VARCHAR(40) NOT NULL ); INSERT INTO distribuidores SELECT * FROM temp; DROP TABLE temp;
As cláusulas para mudar o nome das tabelas, colunas, índices e seqüências são extensões do PostgreSQL ao SQL92.