TypeORM Migrations
Create and manage database schema changes with TypeORM migrations.
Overviewβ
Migrations track schema changes in a version-controlled way, allowing safe database evolution.
Creating a Migrationβ
Auto-Generate from Entity Changesβ
yarn typeorm migration:generate -n AddEmployeePhoneColumn
This compares current entities against the database and generates SQL.
Manual Migrationβ
yarn typeorm migration:create -n CustomMigration
Migration File Structureβ
import { MigrationInterface, QueryRunner } from "typeorm";
export class AddEmployeePhoneColumn1709635260000 implements MigrationInterface {
name = "AddEmployeePhoneColumn1709635260000";
public async up(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
ALTER TABLE "employee"
ADD COLUMN "phoneNumber" varchar(20)
`);
}
public async down(queryRunner: QueryRunner): Promise<void> {
await queryRunner.query(`
ALTER TABLE "employee"
DROP COLUMN "phoneNumber"
`);
}
}
Running Migrationsβ
# Run pending migrations
yarn typeorm migration:run
# Revert last migration
yarn typeorm migration:revert
# Show migration status
yarn typeorm migration:show
Best Practicesβ
| Practice | Description |
|---|---|
Always write down() | Enable rollback |
| Test on staging first | Verify before production |
| Backup before migration | Safety net |
| Use transactions | Atomic changes |
| No data loss | Add columns as nullable first |
| Sequential naming | Timestamps in filenames |
Migration Directoryβ
packages/core/src/database/migrations/
βββ 1700000000001-InitialSchema.ts
βββ 1700000000002-AddTimeTracking.ts
βββ 1700000000003-AddCRMTables.ts
Related Pagesβ
- Database Schema β schema overview
- MikroORM Migrations β MikroORM alternative
- SQLite to PostgreSQL β DB migration