Nâng CaoDatabase iconDatabase

Database migration là gì? Tại sao quan trọng trong CI/CD?

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 _migrations table.
  • Tools: Prisma Migrate (prisma migrate dev tạo migration từ schema diff, prisma migrate deploy apply 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 migrations V1__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 TABLE với NOT NULL không có default trên bảng lớn → lock toàn bộ bảng trong PostgreSQL (dùng NOT VALID + validate separately); DROP COLUMN khô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.

Xem toàn bộ Database cùng filter theo level & chủ đề con.

Mở danh sách Database