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?;