CodeGym /Cursos /SQL SELF /Adicionando e removendo colunas em uma tabela

Adicionando e removendo colunas em uma tabela

SQL SELF
Nível 18 , Lição 0
Disponível

Imagina que você tá desenhando um banco de dados pra uma universidade. No começo, a tabela de estudantes só tem dois campos: ID e nome. Bem simples, a galera começa a usar o sistema. Mas aí, depois de um mês, os professores chegam e falam: "E aí, rola de adicionar idade também?", e logo depois: "Precisa de um email aí". E então: "Bora tirar o campo middle_name, ninguém preenche isso mesmo!". É aí que suas skills com ALTER TABLE pra adicionar e remover colunas vão salvar o dia.

Sintaxe pra adicionar colunas

Então, pra adicionar uma nova coluna numa tabela já existente no PostgreSQL, você usa o comando ALTER TABLE. Olha só a sintaxe:

ALTER TABLE table_name
ADD COLUMN column_name data_type [constraints];
  • table_name — nome da tabela onde você quer adicionar a nova coluna.
  • column_name — nome da coluna que você quer adicionar.
  • data_type — tipo de dado, tipo VARCHAR, INTEGER ou DATE.
  • constraints (opcional) — restrições que você quer colocar nessa coluna, tipo NOT NULL, DEFAULT e por aí vai.

Exemplo: adicionando uma nova coluna

Vamos supor que a gente tem uma tabela students que foi criada assim:

CREATE TABLE students (
    id SERIAL PRIMARY KEY,
    name VARCHAR(100) NOT NULL
);

De repente, pedem pra adicionar uma coluna age pra guardar a idade dos estudantes. Olha como faz:

ALTER TABLE students
ADD COLUMN age INTEGER;

Agora a estrutura da tabela students vai ficar assim:

id name age
1 Eva NULL
2 Alex NULL

Se você adicionar novos registros sem informar a idade, o PostgreSQL vai colocar NULL automaticamente, já que a gente não colocou nenhuma restrição tipo NOT NULL ou valor padrão (DEFAULT).

Sintaxe pra remover colunas

Remover uma coluna de uma tabela também é com o comando ALTER TABLE. A sintaxe é essa aqui:

ALTER TABLE table_name
DROP COLUMN column_name [RESTRICT | CASCADE];
  • table_name — nome da tabela de onde você quer remover a coluna.
  • column_name — nome da coluna que vai ser removida.
  • RESTRICT — impede remover a coluna se ela tiver referência em outro lugar (padrão).
  • CASCADE — remove a coluna junto com tudo que depende dela.

Sobre remoção em cascata eu explico melhor no próximo nível :P

Exemplo: removendo uma coluna desnecessária

Voltando pra tabela students. Decidimos que o campo age não precisa mais. Bora remover:

ALTER TABLE students
DROP COLUMN age;

Agora a estrutura da tabela ficou mais simples de novo:

id name
1 Eva
2 Alex

Exemplos úteis

Adicionando coluna com restrições

E se você quisesse adicionar a coluna age, mas com NOT NULL e um valor padrão? O código seria assim:

ALTER TABLE students
ADD COLUMN age INTEGER NOT NULL DEFAULT 18;

Agora, em todas as linhas que já existem, o campo age vai ficar com valor 18, e os novos registros vão exigir que você informe a idade, a não ser que use o valor padrão.

Removendo coluna com dependências

Se uma coluna tem dependências (tipo, ela é usada em views ou triggers), você vai ter que usar o modificador CASCADE. Mas cuidado: isso pode afetar outros objetos no seu banco. Por exemplo:

ALTER TABLE students
DROP COLUMN email CASCADE;

Erros comuns e particularidades

Erro: adicionando coluna com tipo de dado errado.
Imagina que você adiciona uma coluna do tipo INTEGER, mas tenta guardar texto nela. O PostgreSQL não vai curtir e vai dar erro quando você tentar inserir os dados. O tipo de dado sempre tem que bater com o que você vai guardar.

Erro: removendo coluna sem olhar as dependências.
Por exemplo, se você remover uma coluna que tem índice ou foreign key, o PostgreSQL pode dar erro se você não usar o modificador CASCADE.

Erro: removendo coluna com dependências. Por exemplo, se você remover uma coluna que tem índice ou foreign key, o PostgreSQL pode dar erro se você não usar o modificador CASCADE. Aí você colocou o CASCADE e removeu milhares de linhas que dependiam da coluna que sumiu. Que não era pra ter removido : (

Particularidade: ordem das operações.
Às vezes, adicionar colunas com restrições exige que você saiba a ordem das operações. Tipo, se você vai adicionar uma coluna com NOT NULL, primeiro tem que preencher ela com um valor padrão, senão o PostgreSQL vai reclamar.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION