5.6. Modificação de tabelas

Quando percebemos, após a tabela ser criada, que foi cometido um erro ou que os requisitos da aplicação mudaram, é possível remover a tabela e criá-la novamente. Porém, esta opção não é conveniente quando existem dados na tabela, ou se a tabela é referenciada por outros objetos do banco de dados (por exemplo, uma restrição de chave estrangeira); por isso, o PostgreSQL disponibiliza um conjunto de comandos para realizar modificações em tabelas existentes.

É possível:

Todas estas atividades são realizadas utilizando o comando ALTER TABLE .

5.6.1. Adicionar coluna

Para adicionar uma coluna utiliza-se:

ALTER TABLE produtos ADD COLUMN descricao text;

Inicialmente, a nova coluna contém valores nulos nas linhas existentes na tabela.

Também podem ser definidas, ao mesmo tempo, restrições para a coluna utilizando a sintaxe habitual:

ALTER TABLE produtos ADD COLUMN descricao text CHECK (descricao <> '');

A nova coluna não pode possuir a restrição de não-nulo, porque a coluna inicialmente deve conter valores nulos. Porém, a restrição de não-nulo pode ser adicionada posteriormente. Também não pode ser definido um valor padrão para a nova coluna. De acordo com o padrão SQL esta definição deve preencher a nova coluna das linhas existentes com o valor padrão, o que ainda não está implementado. Porém, o valor padrão para a coluna pode ser especificado posteriormente.

5.6.2. Remover coluna

Para remover uma coluna, utiliza-se:

ALTER TABLE produtos DROP COLUMN descricao;

5.6.3. Adicionar restrição

É utilizada a sintaxe de restrição de tabela para adicionar uma restrição. Por exemplo:

ALTER TABLE produtos ADD CHECK (nome <> '');
ALTER TABLE produtos ADD CONSTRAINT unq_cod_prod UNIQUE (cod_prod);
ALTER TABLE produtos ADD FOREIGN KEY (fk_grupo_produtos) REFERENCES grupo_produtos;

Para adicionar a restrição de não nulo, que não pode ser escrita na forma de restrição de tabela, deve ser utilizada a sintaxe:

ALTER TABLE produtos ALTER COLUMN cod_prod SET NOT NULL;

A restrição será verificada imediatamente, portanto os dados da tabela devem satisfazer a restrição para esta poder ser adicionada.

5.6.4. Remover restrição

Para remover uma restrição é necessário conhecer seu nome. Se foi atribuído um nome à restrição é fácil, caso contrário o sistema atribui à restrição um nome gerado que precisa ser descoberto. O comando \d nome_da_tabela do psql pode ser útil nesta situação; outras interfaces também podem oferecer uma forma de inspecionar os detalhes das tabelas. O comando utilizado para remover restrição é:

ALTER TABLE produtos DROP CONSTRAINT nome_da_restrição;

(Caso esteja lidando com um nome de restrição gerado, como $2, não se esqueça de colocar entre aspas para torná-lo um identificador válido).

Esta sintaxe serve igualmente para todos os tipos de restrição, exceto não-nulo. Para remover uma restrição de não-nulo, utiliza-se:

ALTER TABLE produtos ALTER COLUMN cod_prod DROP NOT NULL;

(Lembre-se que as restrições de não-nulo não possuem nome)

5.6.5. Mudar valor padrão da coluna

Para definir um novo valor padrão para a coluna utiliza-se:

ALTER TABLE produtos ALTER COLUMN preco SET DEFAULT 7.77;

Para remover o valor padrão para a coluna utiliza-se:

ALTER TABLE produtos ALTER COLUMN preco DROP DEFAULT;

Efetivamente é o mesmo que definir o valor nulo como sendo o valor padrão, ao menos no PostgreSQL. Como conseqüência, não é errado remover um valor padrão que não tenha sido definido, porque implicitamente o valor nulo é o valor padrão.

5.6.6. Mudar nome de coluna

Para mudar o nome de uma coluna utiliza-se:

ALTER TABLE produtos RENAME COLUMN cod_prod TO cod_produto;

5.6.7. Mudar nome de tabela

Para mudar o nome de uma tabela utiliza-se:

ALTER TABLE produtos RENAME TO equipamentos;

SourceForge.net Logo