Translate

domingo, 20 de outubro de 2013

Criar uma coluna em uma tabela existente no PostgreSql

Para criar uma coluna em uma tabela existente no postgresql utilizamos a seguinte sintaxe:

ALTER TABLE nome_da_tabela ADD COLUMN  nome_da_coluna tipo_de_dado;

Significado:
  • ALTER TABLE: comando do postgresql para alterar a tabela;
  • nome_da_tabela: nome da tabela na qual será criada a coluna;
  • ADD COLUMN: comando do postgresql que indica que uma coluna deverá ser adicionada;
  • nome_da_coluna: nome da coluna que será criada;
  • tipo_de_dado: tipo de dado da coluna. Exemplo: integer, smallint, character varying, boolean, etc.
 
Segue abaixo 7 exemplos referentes a criação de uma nova coluna:
  • O 1º exemplo mostra como criar uma nova coluna;
  • O 2º exemplo mostra como criar mais de uma coluna em um mesmo comando;
  • O 3º exemplo mostra como criar uma coluna com dados obrigatórios, ou seja não nula (not null). Este exemplo é dividido em 2 itens: 
    • No item "a" não existe dados na tabela;
    • No item "b" já existe dados na tabela;
  • O 4º exemplo mostra como remover a obrigatoriedade de uma coluna (DROP not null);
  • O 5º e o 6º exemplos mostram como criar uma coluna com valor "DEFAULT", ou seja, um valor padrão, caso o valor incluído seja um dado nulo (null), o valor nulo será substituído pelo valor padrão;  
  • O 7º exemplo mostra como remover o valor DEFAULT de uma coluna.
 
Veja o script dos exemplos no GitHub ou faça o download no Google Drive.

1º) Exemplo

Na tabela "esporte" vamos criar a coluna "disponibilidade" para indicar se a modalidade esportiva está disponível em um centro de treinamento.
Podemos visualizar a tabela "esporte" na imagem abaixo:




Para criarmos a coluna "disponibilidade" executaremos o comando abaixo:

ALTER TABLE esporte ADD COLUMN  disponibilidade  boolean;

Veja a tabela abaixo após a execução do comando:



Como podemos visualizar acima, a coluna já foi criada. Para atualizarmos a disponibilidade das modalidades esportivas utilizaremos os comandos abaixo:
 
/*atletismo está indisponivel*/
UPDATE esporte SET disponibilidade = false WHERE id = 1;

/*futebol e natação estão disponíveis*/
UPDATE esporte SET disponibilidade = true WHERE id IN (2,3);

Podemos ver o resultado da atualização na tabela abaixo.

2º) Exemplo

Também é possível criar mais de uma coluna em um único comando.
Vamos criar duas colunas:
  • dt_ev_inicio: data de inicio do evento;
  • dt_ev_fim: data de fim do evento;
Para criar as colunas, vamos executar o comando abaixo:

ALTER TABLE esporte 
ADD COLUMN dt_ev_inicio date
ADD COLUMN dt_ev_fim date

Veja a tabela após a execução do comando:


Para atualizarmos as datas, utilizaremos os comandos abaixo:

UPDATE esporte SET 
dt_ev_inicio = TO_DATE('02/09/2017', 'dd/mm/yyyy'), 
dt_ev_fim = TO_DATE('25/10/2017', 'dd/mm/yyyy')  
WHERE id = 1;
 
UPDATE 
esporte 
SET 
dt_ev_inicio = TO_DATE('02/08/2017', 'dd/mm/yyyy'), 
dt_ev_fim = TO_DATE('28/08/2017', 'dd/mm/yyyy')  
WHERE id = 2;

UPDATE esporte SET 
dt_ev_inicio = TO_DATE('10/08/2017', 'dd/mm/yyyy'), 
dt_ev_fim = TO_DATE('26/08/2017', 'dd/mm/yyyy')  
WHERE id = 3;

Visualize a tabela após a execução do comando:




3º) Exemplo
 
Criar na tabela "esporte" uma coluna obrigatória chamada "categoria", ou seja, que exige que o dado seja obrigatório (não nulo).
 
Antes de criar a coluna devemos verificar se há dados na tabela, para isso vamos utilizar a função "COUNT", esta função conta o número de linhas de uma tabela.
Segue abaixo, o seguinte comando:

SELECT COUNT(*) FROM esporte;
 
a) Caso não haja dados na tabela
 

Vamos executar o comando para criar a coluna 
 
SINTAXE

ALTER TABLE nome_da_tabela ADD COLUMN  nome_da_coluna tipo_de_dado  NOT NULL; 
 
Perceba que acrescentamos "NOT NULL" para que o campo se torne obrigatório. Veja o exemplo abaixo:
 
ALTER TABLE esporte ADD COLUMN  categoria  varchar(80)  NOT NULL;
 
b) Caso haja dados na tabela.
 


Primeiramente crie a coluna como não obrigatória. Vamos executar o comando para criar a coluna.
 
ALTER TABLE esporte ADD COLUMN  categoria  varchar(80);
 
 
 
Atualize os dados da coluna antes de torná-la obrigatória (não nula).
 
Segue a atualização de dados através do comando UPDATE.
 
/*foi atribuído a futebol categoria "coletivo"*/
UPDATE esporte SET categoria = 'coletivo' WHERE id = 2;


/*foi atribuído a atletismo e natação a categoria "individual"*/
 UPDATE esporte SET categoria = 'individual' WHERE id IN (1,3);
 
Após a atualização, veja como ficou a tabela:
 

 
Agora que não há dados nulos, vamos tornar a coluna obrigatória.
 
SINTAXE
 
ALTER TABLE nome_da_tabela ALTER COLUMN nome_da_coluna SET NOT NULL;
 
Perceba que utilizamos "ALTER COLUMN" para alterar "as propriedades" de uma coluna existente, neste caso, torná-la "NÃO NULA".
 
Após o "ALTER COLUMN" colocaremos o nome da coluna.

Após o nome da coluna a setaremos como NÃO NULA, utilizando SET NOT NULL.
 
Veja o exemplo abaixo:

ALTER TABLE esporte ALTER COLUMN categoria SET NOT NULL;

Perceba que após inserir um novo registro, ou seja,  executar o comando "INSERT" com uma categoria nula, será retornado um erro.

Veja o exemplo:
 
INSERT INTO
esporte (esport_desc, disponibilidade, categoria)
VALUES
('canoagem', false, NULL);
 
Veja o erro abaixo:
 
ERROR: null value in column "categoria" violates not-null constraint DETAIL: Failing row contains (4, canoagem, f, null). SQL state: 23502
 

4º) Exemplo
 
Tornar a coluna "categoria" NÃO obrigatória (opcional).
 
Para remover a obrigatoriedade, execute o comando abaixo:
 
SINTAXE
 
ALTER TABLE nome_da_tabela ALTER COLUMN nome_da_coluna DROP NOT NULL;
 
Exemplo:
 
ALTER TABLE esporte ALTER COLUMN categoria  DROP NOT NULL;


 5º) Exemplo

Criar uma coluna chamada "modalidade_ativa" do tipo "boolean" com valor "DEFAULT" (padrão) igual a "true".
 
SINTAXE
 
ALTER TABLE nome_da_tabela ADD COLUMN nome_da_coluna  tipo_de_dado  DEFAULT valor_padrao;
 
Exemplo:
 
ALTER TABLE esporte ADD COLUMN modalidade_ativa boolean DEFAULT true;
 
 
6º) Exemplo
 
Criar uma coluna chamada "data_hora_criacao" do tipo "timestamp without time zone"  com valor "DEFAULT" igual a "data e hora atual".
 
SINTAXE
 
ALTER TABLE nome_da_tabela ADD COLUMN nome_da_coluna tipo_de_dado DEFAULT valor_padrao;
 
ALTER TABLE esporte ADD COLUMN data_hora_criacao timestamp without time zone
DEFAULT current_timestamp;

 
7º) Exemplo
 
 Remover o valor DEFAULT de uma coluna:
 
SINTAXE
 
ALTER TABLE nome_da_tabela ALTER COLUMN nome_da_coluna DROP DEFAULT;
 
Exemplos:
 
a) Remover o valor "DEFAULT" da coluna "modalidade_ativa".
 
ALTER TABLE esporte ALTER COLUMN modalidade_ativa DROP DEFAULT;
 
 
b) Remover o valor "DEFAULT" da coluna "data_hora_criacao".
 
ALTER TABLE esporte ALTER COLUMN data_hora_criacao DROP DEFAULT;

5 comentários: