Team development with Prisma Migrate

To incorporate changes from collaborators:

  1. Pull the changed Prisma schema and ./prisma/migrations folder

  2. Run the migrate dev command to apply new migrations:

    $npx prisma migrate dev

Migrations are applied in the same order as they were created. The creation date is part of the migration subfolder name - for example, 20210316081837-updated-fields was created on 2021-03-16-08:08:37.

Example: Incorporating your team's changes

The following sample scenario demonstrates how a team of three developers share and incorporate changes to the Prisma schema and the migration history.

The following tabs show the team's Prisma schema before and after a round of changes:

schema.prisma before
schema.prisma after
model Post {
id Int @id @default(autoincrement())
title String
content String?
published Boolean @default(false)
author User? @relation(fields: [authorId], references: [id])
authorId Int?
}
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
posts Post[]
}

The team's changes

Your team members Ania and Javier make additive changes to the schema in their local environment and generate migrations.

Ania makes the following changes:

  1. Adds a model field:

    model User {
    /* ... */
    favouriteColor String?
    }
  2. Generates a migration:

    $npx prisma migrate dev --name new-field
  3. Commits the changed schema and the new migration:

    • ./prisma/schema.prisma
    • ./prisma/migrations/20210316081837-new-field/migration.sql

Javier makes the following changes:

  1. Adds a new model to the schema:

    model Tag {
    tagName String @id
    tagCategory Category
    }
  2. Generates a migration:

    $npx prisma migrate dev --name new-model
  3. Commits the changed schema and the new migration:

    • ./prisma/schema.prisma
    • ./prisma/migrations/20210316091837-new-model/migration.sql

The migration history now has two new migrations:

A diagram showing changes by two separate developers converging in a single migration history.

Integrating changes

You want to incorporate your team's changes. To do that, you:

  1. Pull the most recent changes from your team, including:

    • Two new migrations:

      • ./prisma/migrations/20210316081837-new-field/migration.sql
      • ./prisma/migrations/20210316091837-new-model/migration.sql
    • An updated schema file. Git automatically merges the updated schema with your local schema changes (a new bestPacmanScore field):

      model User {
      /* ... */
      favouriteColor String?
      bestPacmanScore Int?
      }
      model Tag {
      tagName String @id
      tagCategory Category
      posts Post[]
      }
  2. Run the migrate dev command:

    $npx prisma migrate dev
    1. Applies Ania and Javier's migrations to your local database.

      • ./prisma/migrations/20210316081837-new-field/migration.sql
      • ./prisma/migrations/20210316091837-new-model/migration.sql
    2. Creates a new migration with your changes, prompts you to name it (pacman-field), and applies the new migration to your local database:

      • ./prisma/migrations/20210322081837-pacman-field/migration.sql
  3. Commit the merged schema.prisma and your new migration: ./prisma/migrations/20210322081837-pacman-field/migration.sql

Your schema.prisma and local database now includes your team's changes, and the migration history includes your migration:

A migration history with 5 migrations.

Source control

If you are using Prisma Migrate, you must commit the following files to source control:

  • The contents of the .prisma/migrations folder, including the migration_lock.toml file
  • The Prisma schema file (schema.prisma)
Edit this page on GitHub