Migration là versioned scripts kiểm soát schema changes — zero-downtime migration cần nhiều bước (add nullable → deploy → backfill → add NOT NULL); không bao giờ edit migration đã deploy.
- Migration là versioned scripts thay đổi schema một cách có kiểm soát — mỗi migration có
up(apply) vàdown(rollback), được track trong_migrationstable. - Tools: Prisma Migrate (
prisma migrate devtạo migration từ schema diff,prisma migrate deployapply trong production); Knex.js migrations (manual SQL-like JS); Flyway (Java ecosystem nhưng dùng được với bất kỳ DB, file-based SQL migrationsV1__init.sql,V2__add_users.sql); Liquibase (XML/YAML/SQL, enterprise features). - CI/CD flow: migrations chạy tự động trước khi deploy new code — đảm bảo schema sẵn sàng cho code mới.
- Zero-downtime migrations: thêm column nullable trước (backward compatible) → deploy code mới đọc column mới → backfill data → add NOT NULL constraint → remove old column (multi-step, mỗi step là separate deploy).
- Nguy hiểm:
ALTER TABLEvớiNOT NULLkhông có default trên bảng lớn → lock toàn bộ bảng trong PostgreSQL (dùngNOT VALID+ validate separately);DROP COLUMNkhông rollback được nếu đã có data. - Best practices: migrations idempotent, không bao giờ edit migration đã deploy, test down migration trước khi merge, review migrations cẩn thận như code review — schema change là irreversible.