Fala, Luidi!
Vou te mostrar como usar sequelize.sync(), como separar ambientes, qual ferramenta usar para comparar esquemas, e como lidar com migrações antigas, tudo de forma objetiva.
Com base no que você explicou, faça assim:
// arquivo: sync-dev.js
const { sequelize } = require('./models');
async function syncDev() {
// *force* recria tabelas. Evite usar em produção.
await sequelize.sync({ alter: true });
console.log('Banco sincronizado com o modelo (somente DEV)');
}
syncDev();
Importante:
- Execute esse arquivo somente no ambiente de desenvolvimento.
- No
package.json, você pode separar ambientes assim:
{
"scripts": {
"dev": "NODE_ENV=development node sync-dev.js && node app.js",
"start": "NODE_ENV=production node app.js"
}
}
Ferramenta para comparar o modelo com o banco
Use a ferramenta sequelize-auto-migrations ou um db diff tool como DB Schema ou DBeaver (função compare schemas).
Ela mostra diferenças estruturais, por exemplo:
- campo que falta
- tipo incorreto
- validações feitas no banco (como
CHECK)
Essas ferramentas não leem validação de aplicação, ou seja, não vão comparar sua validação de CPF do código com a validação do banco.
Para isso, você mesmo precisa garantir que colocou uma constraint correspondente no banco.
Sobre validações novas (ex: CPF)
Se você quiser adicionar novas validações no nível do banco (ex: adicionar um CHECK mais completo), faça assim:
- Crie uma nova migração apenas com a alteração.
- Nunca apague migrações antigas, pois isso quebra o histórico.
Veja este exemplo de migração adicionando validação ao CPF:
// migration: 20250101120000-add-cpf-check.js
module.exports = {
async up(queryInterface, Sequelize) {
await queryInterface.changeColumn('Pessoas', 'cpf', {
type: Sequelize.STRING,
allowNull: false,
validate: {}, // validações da aplicação não entram aqui
});
await queryInterface.sequelize.query(`
ALTER TABLE Pessoas
ADD CONSTRAINT cpf_valid CHECK (length(cpf) = 11);
`);
},
async down(queryInterface) {
await queryInterface.sequelize.query(`
ALTER TABLE Pessoas
DROP CONSTRAINT cpf_valid;
`);
}
};
"Como apagar uma migração já aplicada?"
Você não apaga um arquivo antigo.
Você reverte:
npx sequelize-cli db:migrate:undo
Ou para reverter várias:
npx sequelize-cli db:migrate:undo:all
Se quiser “corrigir” uma migração antiga, crie outra migração ajustando.
Isso mantém o histórico íntegro — que é o objetivo das migrações.
Fico à disposição.