Skip to main content
Version: 0.9.x

Running Migration

After you have defined the migrations, you can apply or revert migrations in the terminal or on application startup.

Command Line Interface (CLI)

Migrations can be run manually in the terminal. DATABASE_URL must be set in your environment, follow the instructions here to configure it.

Supported commands:

  • init: Initialize migration directory
  • generate: Generate a new migration file
  • up: Apply all pending migrations
  • up -n 10: Apply 10 pending migrations
  • down: Rollback last applied migration
  • down -n 10: Rollback last 10 applied migrations
  • status: Check the status of all migrations
  • fresh: Drop all tables from the database, then reapply all migrations
  • refresh: Rollback all applied migrations, then reapply all migrations
  • reset: Rollback all applied migrations

Via sea-orm-cli

The sea-orm-cli will execute cargo run --manifest-path ./migration/Cargo.toml -- COMMAND under the hood.

$ sea-orm-cli migrate COMMAND

You can customize the manifest path.

$ sea-orm-cli migrate COMMAND -d ./other/migration/dir

Via SeaSchema Migrator CLI

Run the migrator CLI defined in migration/main.rs.

$ cd migration
$ cargo run -- COMMAND

Migrating Programmatically

You can perform migration on application startup with Migrator, which implements the MigratorTrait.

src/main.rs
use migration::{Migrator, MigratorTrait};

/// Apply all pending migrations
Migrator::up(db, None).await?;

/// Apply 10 pending migrations
Migrator::up(db, Some(10)).await?;

/// Rollback last applied migrations
Migrator::down(db, None).await?;

/// Rollback last 10 applied migrations
Migrator::down(db, Some(10)).await?;

/// Check the status of all migrations
Migrator::status(db).await?;

/// Drop all tables from the database, then reapply all migrations
Migrator::fresh(db).await?;

/// Rollback all applied migrations, then reapply all migrations
Migrator::refresh(db).await?;

/// Rollback all applied migrations
Migrator::reset(db).await?;