新增具有預設值的列
以下示例將 admin
列新增到 users
表,併為該列提供預設值 false
。
class AddDetailsToUsers < ActiveRecord::Migration[5.0]
def change
add_column :users, :admin, :boolean, default: false
end
end
使用預設值進行遷移可能需要很長時間才能在大型表中使用 PostgreSQL。這是因為必須使用新新增的列的預設值更新每一行。為了避免這種情況(並減少部署期間的停機時間),你可以將遷移分為三個步驟:
- 新增類似於上面的
add_column
-migration,但不設定預設值 - 在應用程式執行時,在 rake 任務或控制檯上部署和更新列。確保你的應用程式已將資料寫入該列以獲取新的/更新的行。
- 新增另一個
change_column
遷移,然後將該列的預設值更改為所需的預設值