Lesson 57 — Database Migrations

Ba module tương tác: (1) Migration timeline — apply up/down, theo dõi version & bảng schema_migrations; (2) Expand-contract — animate đổi tên cột zero-downtime qua 5 phase; (3) Lock impactCREATE INDEX có và không CONCURRENTLY.

① Migration timeline — up / down / goto

Database nhớ version cao nhất đã apply. up chạy các migration chưa apply theo thứ tự tăng; down đảo ngược theo thứ tự giảm.

Database đang ở version 0 (trống). Bấm up để apply migration đầu tiên.
Bảng schema_migrations
versiondirty
0false
Schema hiện có
(trống)

② Expand-contract — đổi tên cột zero-downtime

Đổi users.nameusers.full_name mà app vẫn chạy. KHÔNG RENAME trực tiếp — đi qua 5 phase, mỗi phase chờ rolling deploy rút hết code cũ.

0. Ban đầu
1. Expand
add cột
2. Backfill
3. Dual-write
4. Switch read
5. Contract
drop cũ

Schema (cột bảng users)

code đọc code ghi đọc+ghi

Code app đang chạy

③ Lock impact — CREATE INDEX vs CONCURRENTLY

CREATE INDEX thường lock write cả bảng tới khi xong → request ghi xếp hàng. CREATE INDEX CONCURRENTLY xây index không chặn write (chậm hơn).

CREATE INDEX idle

Write request:

... CONCURRENTLY idle

Write request: