4
respostas

Adicionando novas Categorias

Ao fazer testes adicionando series aleatórias, quando a categoria ainda não existe, por exemplo, "La Casa de Papel", cuja categoria é "Reality-TV", como esta categoria não existia, adicionei no Enum Categoria, entretanto, dava erro ao adicionar ao banco de dados, só consegui resolver dropando as tabelas do banco de dados e deixando o hibernate recrialas, dai funcionou. Isso é uma característica do PostgresSQL? No MySQL dava para adicionar novas entradas nos Enums sem ter que recriar a tabela que usa o Enum.

É isso mesmo? O que estou fazendo de errado?

4 respostas

A mensagem de erro é "Caused by: org.springframework.dao.DataIntegrityViolationException: could not execute statement [ERROR: new row for relation "series" violates check constraint "series_genero_check""

Séries com novas categorias para usar para testar: La casa de papel, Lost, A small light.

Boa tarde, Cleyton! Tudo bem?

Essa diferença de comportamento que você observou está relacionada às implementações específicas dos bancos de dados PostgreSQL e MySQL em relação ao suporte para alterações em tipos ENUM.

No PostgreSQL, quando você faz uma alteração no tipo ENUM (como adicionar um novo valor), pode ser necessário recriar a tabela para que as alterações tenham efeito. Isso ocorre porque, internamente, o PostgreSQL trata os tipos ENUM de maneira diferente de outros tipos de dados. Quando você adiciona um novo valor ao ENUM, pode afetar a estrutura interna da tabela e, portanto, pode ser necessário recriar a tabela para garantir a consistência.

No MySQL, a adição de novos valores a um ENUM geralmente não requer a recriação da tabela. O MySQL trata os ENUMs de uma maneira que permite a adição de novos valores sem afetar a estrutura da tabela.

Se você está enfrentando esse problema no PostgreSQL, a solução que você encontrou (dropar as tabelas e deixar o Hibernate recriá-las) é uma abordagem comum para lidar com alterações em tipos ENUM.

Espero ter esclarecido essa situação. Caso tenha mais dúvidas, estarei à disposição para ajudá-lo.

Grande abraço e bons estudos!

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

Olá, @Armano, boa tarde,

Obrigado por responder!

Pesquisando no google eu encontrei o comando "ALTER TYPE enum_type ADD VALUE 'new_value';"

A minha esperança era poder executar esse comando no console SQL do PGAdmin e assim não precisar recriar a tabela, entretanto, não sei por qual nome o "enum_type" deve ser referenciado. Fucei no gerenciador de objetos do PGAdmin, mas não consegui descobrir. O Postgres é uma copia do Oracle (eu digia que "inspirado" pelo Oracle). No Oracle todos os objetos de banco de dados tem um nome.

Cleyton