4
respostas

Não esta atualizando os dados do banco de dados quando uso update da migration

esta ocorrendo este erro, estou usando postgreeSQl, a migrations tem que se de forma diferente? Error executing DDL "alter table if exists nurses add column ativo boolean not null" via JDBC [ERRO: a coluna "ativo" da relação "nurses" contém valores nulos]

estou usando este código na migrations

alter table nurses add ativo tinyint not null ;
update nurses set ativo=1;
4 respostas

Boa Tarde Marcos tudo bem?

Como a mensagem informa ERRO: a coluna "ativo" da relação "nurses" contém valores nulos então tem que primeiro ser criado essa coluna sem a restrição do not null, em seguida atualizar os valores da coluna ativo para os registros. Depois que essas duas etapas forem feitas ai pode alterar para NOT NULL.

-- 1. Adicionar a coluna sem a restrição NOT NULL
ALTER TABLE nurses ADD COLUMN ativo BOOLEAN;

-- 2. Atualizar todos os registros existentes com o valor desejado
UPDATE nurses SET ativo = true; -- Ou 'false', dependendo da sua regra de negócio

-- 3. Agora, alterar a coluna para NOT NULL após os valores estarem definidos
ALTER TABLE nurses ALTER COLUMN ativo SET NOT NULL;

Olá Marcos!

O erro que você está recebendo ocorre porque o PostgreSQL não permite adicionar uma coluna NOT NULL sem um valor padrão em tabelas que já possuem dados, pois isso resultaria em valores nulos para as linhas existentes.

Para resolver esse problema, você pode seguir um desses caminhos:

  1. Adicionar a coluna com um valor padrão: Você pode definir um valor padrão para a nova coluna ao adicioná-la, o que evitará valores nulos. Por exemplo:

    ALTER TABLE nurses ADD COLUMN ativo BOOLEAN DEFAULT FALSE NOT NULL;
    

    Isso adicionará a coluna ativo com o valor padrão FALSE para todas as linhas existentes.

  2. Adicionar a coluna sem a restrição NOT NULL e depois atualizar os valores: Primeiro, adicione a coluna sem a restrição NOT NULL, atualize os valores e depois altere a coluna para NOT NULL:

    ALTER TABLE nurses ADD COLUMN ativo BOOLEAN;
    UPDATE nurses SET ativo = TRUE;
    ALTER TABLE nurses ALTER COLUMN ativo SET NOT NULL;
    

Essas abordagens devem ajudar a evitar o erro que você está enfrentando.

Espero ter ajudado e bons estudos!

olá, mesmo utilizando os códigos acima esta retornando o mesmo erro

Tentou assim:

ALTER TABLE nurses ADD COLUMN ativo BOOLEAN;
UPDATE nurses SET ativo = TRUE;
ALTER TABLE nurses ALTER COLUMN ativo SET NOT NULL;

Lembrando que se a migration falhar, o Flyway deixa essa falha registrada no banco de dados e você vai precisar apagar a execução dela no banco de dados, para que ela seja executada novamente:

delete from flyway_schema_history where success = false;