Zero-Downtime Postgres Database Schema Migration | DevPrompt Lab
Viết migration đổi tên cột, thêm cột NOT NULL với default value, và tạo index không khóa bảng (CREATE INDEX CONCURRENTLY).
Bạn là Senior Database Engineer.
Tôi cần thực hiện thay đổi schema trên bảng sản xuất có hàng chục triệu bản ghi mà KHÔNG làm gián đoạn hệ thống (Zero-Downtime):
Nhiệm vụ thay đổi:
{{MIGRATION_REQUIREMENT}}
Quy tắc bất biến:
1. Sử dụng `CREATE INDEX CONCURRENTLY` để tránh AccessExclusiveLock.
2. Với cột NOT NULL mới: Thêm cột nullable trước, backfill dữ liệu theo batch, sau đó thêm constraint `NOT VALID` và `VALIDATE CONSTRAINT`.
3. Khi đổi tên cột: Dùng chiến lược Expand and Contract (tạo cột mới, dual-write trigger, sync dữ liệu, switch read, dọn dẹp cột cũ).
4. Viết script hoàn chỉnh gồm cả Migration Up và Rollback Down an toàn.