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

Erro ao usar migrations

Fala pessoal, tudo bem? Segue meu problema abaixo:

alter table medicos add column telefone varchar(20) not null;

SQL State : 23502 Error Code : 0 Message : ERRO: a coluna "telefone" da relação "medicos" contém valores nulos

Estou tendo este erro ao tentar usar o migration com postgre. No curso em si, o professor está usando mysql, mas no meu pc estou com um problema com mysql, então decidi usar o postgre. Em uma primeira versao da migration, eu consegui criar um script para criar a tabela, mas nessa segunda versão não estou conseguindo, o próprio script fica com erro. Na parte superior do arquivo .sql, eu coloquei na opção "Virtual PostgreSQL 9.3.4", que inclusive foi o qual eu criei o primeiro script. Mas agora não está indo, não consigo efetuar o alter table, alguém saberia me dizer o por quê ?

org.flywaydb flyway-database-postgresql 10.10.0 runtime

Também adicionei essa dependência no pom.xml para poder criar o primeiro script, mas como disse, nesse segundo não está funcionando. Se alguém puder me ajudar ficarei muito grato!

4 respostas

Oi!

O MySQL aceita esse alter table, mas o Postgres não.

Você vai precisar alterar para:

alter table medicos add column telefone varchar(20) not null default '';

Obs: como a migration falhou, veja aqui como resolver: https://cursos.alura.com.br/course/spring-boot-3-desenvolva-api-rest-java/task/121056

Tudo bom Rodrigo? Eu acabei executando a migration sem o not null e deu certo, pois tava retornando que o valor da coluna era nulo. Após ver sua resposta aq, criei uma nova migration para alterar a coluna telefone e adicionar o "not null default ' ' ", mas eu tenho esse retorno:

query -> ALTER TABLE medicos ALTER COLUMN telefone SET NOT NULL default " ";

retorno -> SQL State : 42601 Error Code : 0 Message : ERRO: erro de sintaxe em ou próximo a "default"

me retorna um erro de sintaxe, e se eu tiro o default tenho esse retorno -> SQL State : 23502 Error Code : 0 Message : ERRO: a coluna "telefone" da relação "medicos" contém valores nulos

O que pode estar causando isso ?

solução!

O problema é que já existem registros no banco de dados e no Postgres tem essa validação, que não deixa criar uma coluna not null, pois a tabela possui registros existentes com o valor null.

uma outra alternativa:

update medicos set telefone = '00999999999' where telefone is null;
alter table medicos add column telefone varchar(20) not null;

Dessa forma, antes de criar a coluna todos os registros com telefone null serão atualizados para um valor qualquer, e com isso o alter table deve funcionar.

Obrigado pela ajuda Rodrigo. Eu dei um drop column para apagar a coluna telefone que tinha colocado e logo após usei seu comanda e funcionou, obrigado mesmo!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software