Introduction
Database versioning is one of the biggest challenges in rapidly evolving projects. With teams working simultaneously on different features, keeping the database state synchronized with the code is essential to avoid errors and data loss. In this article, you will learn how to use Prisma Migrate to apply best practices for database versioning in Node.js projects, with a special focus on production environments.
Why version the database?
Just as we control source code versioning with Git, we also need to apply this principle to databases. Versioning:
- Ensures consistency between environments (dev, staging, and production);
- Facilitates the rollback of problematic changes;
- Allows traceability of schema changes;
- Improves collaboration between teams.
Introduction to Prisma Migrate
Prisma Migrate is Prisma's official database migration tool. It allows you to create and apply file-based migrations that reflect changes in the code-defined schema.
Advantages of Prisma Migrate
- Synchronization between the
.prismaschema and the database. - Versioned migrations in files, versionable with Git.
- Ease of creating and applying migrations.
- Execution control with history in the
_prisma_migrationstable.
Migration lifecycle with Prisma
| Step | Command | Description |
|---|---|---|
| Creation | npx prisma migrate dev --name migration-name | Generates and applies the migration in the local environment. |
| Review | npx prisma migrate resolve --applied | Marks a migration as applied without executing it (specific cases). |
| Production | npx prisma migrate deploy | Applies pending migrations in the production environment. |
Best practices when using Prisma Migrate
1. Version everything with Git
Each new migration generates a folder with SQL and metadata. Version everything, including the files inside /prisma/migrations, so that the team shares the same history.
2. Name migrations meaningfully
Avoid generic names like init or migration1. Prefer names like create-users-table or add-is-admin-column-to-users, which make the purpose clear.
3. Maintain a staging environment
Before applying the migration in production, test in an environment as close as possible to reality. This helps to predict failures and conflicts.
4. Never edit an already applied migration
Instead of editing an existing migration, generate a new migration with the changes. This keeps the history intact and avoids inconsistencies between environments.
5. Automate deployment with CI/CD
Include the commands npx prisma migrate deploy in your CI/CD pipeline. This ensures that all migrations are applied before the app deployment.
6. Synchronize with the schema
If you need to apply the current schema directly without migrations (very specific cases), use npx prisma db push. But avoid this command in production.
Case study: API with Node.js and Prisma
Imagine you are developing a task management API with Node.js and Prisma. When creating the first Task model:
model Task {
id Int @id @default(autoincrement())
title String
completed Boolean @default(false)
createdAt DateTime @default(now())
}
You would run:
npx prisma migrate dev --name create-task-table
This would create the Task table in the database and the first versioned migration. Whenever you change this model (for example, adding a priority column), a new migration must be created.
Conclusion
Controlling database versioning with Prisma Migrate is an essential practice to maintain the stability and scalability of your Node.js project. With simple commands and a well-defined flow, you avoid rework, improve collaboration, and ensure data integrity between environments.
By applying these best practices in your daily routine, your database will become as versionable and reliable as your source code.
share.title
Leia Também
Practical guide to implementing authentication with Supabase and Next.js PostgreSQL vs MySQL: Which Database to Choose for Your Project? How to build scalable microservices with NestJS and RabbitMQ: Step-by-step guide Decoupled APIs with NestJS and GraphQL: When and Why to Use NodeJS and NestJS: Understand how and when to use these technologiesComentários
Você precisa estar logado para deixar um comentário.

