Skip to main content
Prisma Documentation Docs

Search documentation

Type to search this documentation.

On this pageOverview

db update

db update compares the live database with the emitted contract and applies the changes that close the gap, whether or not the database was bootstrapped with db init.

Use it for direct reconciliation when you do not need a checked-in migration package.

title="bun"
bunx prisma db update --db "$DATABASE_URL"
pnpm
pnpm prisma db update --db "$DATABASE_URL"
yarn
yarn prisma db update --db "$DATABASE_URL"
npm
npx prisma db update --db "$DATABASE_URL"
Option What it does
--db <url> Connects to the database.
--dry-run Shows planned operations without applying them.
--to <contract> Updates to a specific contract (hash, prefix, ref name, migration directory name, or ./path).
--advance-ref <name> Advances the named ref to the post-command contract hash. Without it, db update advances db when --db is omitted, and advances nothing when --db is passed.
--config <path> Read this config file instead of ./prisma.config.ts.
--json Prints a machine-readable result.

Run without --db, db update takes the connection from db.connection in prisma.config.ts and advances the ref named db to the contract it just applied. Pass --db and that advancement is suppressed, even when the URL is the same one the config holds. Pass --advance-ref db alongside --db to get it back.

The db ref is what migration plan uses as its starting point when you do not pass --from. Passing --db only suppresses the advancement; it never removes a db ref that already exists. So a loop that always passes --db without --advance-ref db leaves the ref wherever it was last set, and the next migration plan starts from that stale contract. If the ref was never created, migration plan plans from an empty database while migrations/app/ is empty, and refuses with MIGRATION.PLAN_ORIGIN_UNKNOWN once migrations exist on disk.

An operation that would destroy data is applied only with your consent: the command asks you to type the database name. In a CI job or a run with --no-interactive, where the command cannot ask, pass the consent as --confirm <database> instead:

title="bun"
bunx prisma db update --db "$DATABASE_URL" --no-interactive --confirm appdb
pnpm
pnpm prisma db update --db "$DATABASE_URL" --no-interactive --confirm appdb
yarn
yarn prisma db update --db "$DATABASE_URL" --no-interactive --confirm appdb
npm
npx prisma db update --db "$DATABASE_URL" --no-interactive --confirm appdb
title="bun"
bunx prisma contract emit

bunx prisma db update --db "$DATABASE_URL" --dry-run

bunx prisma db update --db "$DATABASE_URL" --advance-ref db

bunx prisma db verify --db "$DATABASE_URL"
pnpm
pnpm prisma contract emit
pnpm prisma db update --db "$DATABASE_URL" --dry-run
pnpm prisma db update --db "$DATABASE_URL" --advance-ref db
pnpm prisma db verify --db "$DATABASE_URL"
yarn
yarn prisma contract emit
yarn prisma db update --db "$DATABASE_URL" --dry-run
yarn prisma db update --db "$DATABASE_URL" --advance-ref db
yarn prisma db verify --db "$DATABASE_URL"
npm
npx prisma contract emit
npx prisma db update --db "$DATABASE_URL" --dry-run
npx prisma db update --db "$DATABASE_URL" --advance-ref db
npx prisma db verify --db "$DATABASE_URL"

Use --dry-run before applying changes in shared environments.

For reviewable database changes in version control, use migration plan and db migrate.

Use db update for local development, preview environments, and workflows where direct reconciliation is acceptable.

Suggest an edit

Propose a replacement for this page. The site team reviews it before applying any changes.

Export
Documentation menu