Sắp xếp: đổi tên cột không downtime Trung cấp
Thời gian đọc ước tính: 1 phút
Đổi tên cột nghe đơn giản: một câu ALTER TABLE ... RENAME COLUMN. Nhưng khi rolling deploy, bản app cũ và mới chạy cùng lúc. Một trong hai sẽ đọc cột không tồn tại.
Sắp xếp lại các bước dưới đây. Bấm Kiểm tra để biết bước nào sai chỗ và sai thì hỏng gì.
Đổi tên cột status → payment_status không downtime
Bảng orders 50 triệu row, app chạy 6 pod và deploy kiểu rolling: lúc chuyển giao, bản cũ và bản mới chạy cùng lúc.
Sắp xếp các bước để không request nào lỗi và luôn rollback được.
Dùng ▲▼ để đổi chỗ từng bước, hoặc chạm ⠿ của một bước rồi chạm vào vị trí mới. Trên máy tính có thể kéo thả.
- Backfill row cũ theo batch, rồi đối soát mismatch = 0
UPDATE ... WHERE id BETWEEN $1 AND $2 - Deploy app ghi cả hai cột, vẫn đọc
status DROP COLUMN statusở migration riêng- Thêm cột
payment_status(nullable) dướilock_timeout - Deploy app đọc
payment_status, vẫn ghi cả hai - Hết rollback window: deploy app ngừng ghi
statusvà bỏ cột khỏi ORM
Giải thích đầy đủ từng pha, kể cả NOT NULL và index không khoá bảng: Expand–contract migration.