Bỏ qua để đến nội dung
Knowledge Hub

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ì.

Sắp xếp

Đổ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ả.

  1. Backfill row cũ theo batch, rồi đối soát mismatch = 0UPDATE ... WHERE id BETWEEN $1 AND $2
  2. Deploy app ghi cả hai cột, vẫn đọc status
  3. DROP COLUMN status ở migration riêng
  4. Thêm cột payment_status (nullable) dưới lock_timeout
  5. Deploy app đọc payment_status, vẫn ghi cả hai
  6. Hết rollback window: deploy app ngừng ghi status và 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.