How to squash migrations in Prisma

Squashing migrations in Prisma helps to optimize your migration history by combining multiple migration files into one. This is particularly useful for projects with a large number of migrations, making the history cleaner and easier to manage.

Pre-requisites

  1. Prisma CLI installed
  2. A Prisma project with existing migrations

Steps to Squash Migrations

Backup Database

First, backup your database. This step is critical. Don't skip it.

# For PostgreSQL pg_dump dbname > backup.sql # For MySQL mysqldump -u username -p dbname > backup.sql

Delete Migrations Folder

Delete the migrations folder in your prisma directory.

rm -r prisma/migrations

Generate Squashed Migration

Run prisma migrate dev to create a new migration that represents the squashed schema.

prisma migrate dev --name squashed_migration

This will create a new migrations folder containing a single migration that represents your current schema.

Test The New Migration

Apply the new migration to a fresh database to ensure it works as expected. Make sure to only run this in development since it will wipe your database.

prisma migrate reset

Commit Changes

Commit the new migrations folder and the updated schema.prisma to your version control system.

git add -A git commit -m "Squashed migrations"

Caveats and Warnings

  1. History Mismatch: Squashing migrations will cause a history mismatch in environments where the migrations have been applied. Coordinate with your team to apply the squashed migration in all environments. This can be a problem if your migrations are used in systems that you don’t control. This is something that we have to consider at Basedash since we offer self-hosting.
  2. Data Loss: The prisma migrate reset command used for testing will wipe your database. Make sure you have a backup.

Summary

  1. Backup your database.
  2. Delete the old migrations folder.
  3. Generate a new, squashed migration.
  4. Test the new migration.
  5. Commit your changes.

And there you have it: your migrations are now squashed and your project is cleaner for it.

Invite only

We're building the next generation of data visualization.