Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

[Dúvida] Alterar tipo de coluna

Olá! criei uma tabela com um campo formato INTEGER mas preciso alterar para o formato SERIAL, tentei usar o comando ALTER COLUMN mas deu erro

codigo para criar a tabela

CREATE TABLE hoteis(
Nr_hotel INTEGER,
Nm_hotel TEXT,
Nm_cidade TEXT)

codigo para alterar o campo 
    ALTER TABLE hoteis 
ALTER COLUMN Nr_hotel Serial,

ERROR: syntax error at or near "Serial" LINE 2: ALTER COLUMN Nr_hotel Serial; ^ SQL state: 42601 Character: 45

Obrigada!

4 respostas
solução!

Oi, Cristina, tudo bem?

Ao tentar alterar o tipo de dado da coluna Nr_hotel de INTEGER para SERIAL, você recebeu um erro de sintaxe. Isso aconteceu porque o comando ALTER COLUMN só pode alterar a estrutura de uma coluna, mas não pode criar objetos adicionais, como sequências — as quais são determinadas, por exemplo, através do tipo SERIAL.

Para alterar o tipo de dado de uma coluna de INTEGER para SERIAL, seguiremos as etapas abaixo:

1 - Adicionar uma nova coluna do tipo SERIAL à tabela hoteis:

ALTER TABLE hoteis ADD COLUMN id SERIAL;

2 - Copiar os valores da coluna Nr_hotel para a nova coluna id:

UPDATE hoteis SET id = Nr_hotel;

3 - Remover a coluna Nr_hotel antiga:

ALTER TABLE hoteis DROP COLUMN Nr_hotel;

4 - Renomear a nova coluna para Nr_hotel:

ALTER TABLE hoteis RENAME COLUMN id TO Nr_hotel;

Explicando os códigos acima, o primeiro comando adiciona uma nova coluna id do tipo SERIAL na tabela hoteis. Em seguida, usamos o comando UPDATE para copiar os valores da coluna antiga Nr_hotel para a nova coluna id. Depois, removemos a coluna antiga Nr_hotel usando o comando DROP COLUMN. Por fim, renomeamos a nova coluna id para Nr_hotel usando o comando RENAME COLUMN.

Espero que essa explicação ajude a resolver o seu problema, Cristina! Fique à vontade para perguntar se tiver mais alguma dúvida.

Um forte abraço.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Andrielli, muito obrigada! Super funcionou ;)

Andrieli, boa noite! A dúvida da Cristina também era a minha, obrigado por saná-la. :)

Pelo que entendi então não existe uma forma de alterar o data type da coluna e sim criar uma nova, fazer a cópia dos dados para a nova + renomeação e excluir a antiga?

Oi, Alison! Tudo bem?

Na verdade, é possível sim alterar o tipo de dado de uma coluna.

No caso específico que a Cristina compartilhou, estávamos lidando com SERIAL, que por "baixo dos panos" trata-se do tipo INTEGER com uma característica especial que permite trabalharmos com sequências de números. Portanto, como lidamos com uma ferramenta geradora de sequências, foi necessário realizar o procedimento de criar uma coluna e copiar os dados da coluna original para a nova.

Quando a coluna não está relacionada com o tipo SERIAL, é possível alterá-la de forma direta, como vê-se no exemplo abaixo:

ALTER TABLE tabela
ALTER COLUMN coluna TYPE novo_tipo_de_dado

Observe que utilizamos duas vezes o comando ALTER. Inicialmente, ele serve para indicar que haverá a atualização de determinada tabela. Depois disso, o seu segundo uso refere-se à edição de uma coluna. Após defini-la, escrevemos a cláusula TYPE, cujo conteúdo posterior é o novo tipo de dado da coluna, como VARCHAR(100), INTEGER, FLOAT...

Mudanças muito bruscas (pouco comuns) podem exigir alguns passos a mais, logo, realizar testes durante as nossas tarefas diárias é uma etapa importante.

Espero ter ajudado, Alison! Caso surjam novas dúvidas, sugiro a criação de um novo tópico do fórum. Dessa forma, conseguimos conversar de forma mais individual e personalizada.

Abraços!