1
resposta

Erro ao rodar "npx sequelize-cli db:seed:all" logo após rodar o "npx sequelize-cli db:seed:undo:all"

Olá, estou acompanhando as aulas e fazendo a maioria dos passos a mão, mas a parte dos seeders eu fiz questão de pegar do do projeto já finalizado buscando evitar problemas problemas.

Porém o que acontece é tudo dá certo se eu simplesmente seguir essa ordem: 1. criar o db escola_ingles; (CREATE DATABASE IF NOT EXISTS escola_ingles;) 2. criar as tabelas; (npx sequelize-cli db:migrate) 3. popular as tabelas. (npx sequelize-cli db:seed:all)

Mas o problema da imagem abaixo acontece justamente quando eu coloquei mais dois passos como teste. 4. defazer todos os seeds feitos (npx sequelize-cli db:seed:undo:all ) 5. populando as tabelas novamente (npx sequelize-cli db:seed:all)

Então porque está dando esse só após eu fazer esses passos? Se eu não fizer o passo 4 nada de errado acontece, pelo menos até agora.

ERROR: Cannot add or update a child row: a foreign key constraint fails (escola_ingles.Turmas, CONSTRAINT Turmas_ibfk_1 FOREIGN KEY (docente_id) REFERENCES Pessoas (id))

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Oi, Michel! Tudo bem? Se eu não estou enganado, rodar o db:seed:undo:all só apaga os registros do banco de dados, mas quando novas informações são adicionadas o id sequencial continua a contar dos registros que existiam. Ou seja, se eu adiciono a Pessoa com o id 1 e apago, quando eu adicionar uma nova Pessoa ela terá o id 2 e não o 1 (pelo menos é o comportamento que vi aqui no SQLite).

Portanto, quando você faz o primeiro seed, ele respeita a sequencia de IDs, mas na segunda vez que você popula sem apagar o banco de dados/tabelas, os registros serão gerados com IDs diferentes dos esperados nos outros arquivos de seed que precisam deles para fazerem os relacionamentos. Provavelmente isso está causando o erro que você está vendo, pois simplesmente o registro com ID de Pessoas referenciado no seed de Turmas não existe mais.

Talvez você não passe por esse problema se rodar db:migrate:undo:all e depois rodar db:migrate e db:seed:all.

Espero ter ajudado, valeu!