Trên bảng hàng triệu row, một số migration gây lock cả bảng và downtime:
Nguy hiểm:
ruby
# Thêm column NOT NULL không có default → lock cả bảng
add_column :orders, :status, :string, null: false
# Thêm index không có CONCURRENTLY → block writes
add_index :orders, :user_idAn toàn:
ruby
# 1. Thêm column nullable (không lock)
add_column :orders, :status, :string
# 2. Backfill data trong batch
Order.in_batches.update_all(status: "pending")
# 3. Sau khi data đầy đủ, thêm constraint NOT NULL riêng
change_column_null :orders, :status, false
# Index với CONCURRENTLY — không block reads/writes
add_index :orders, :user_id, algorithm: :concurrentlyGem strong_migrations tự phát hiện unsafe migration và gợi ý cách viết lại an toàn.