新增具有預設值的列

以下示例將 admin 列新增到 users 表,併為該列提供預設值 false

class AddDetailsToUsers < ActiveRecord::Migration[5.0]
  def change
    add_column :users, :admin, :boolean, default: false
  end
end

使用預設值進行遷移可能需要很長時間才能在大型表中使用 PostgreSQL。這是因為必須使用新新增的列的預設值更新每一行。為了避免這種情況(並減少部署期間的停機時間),你可以將遷移分為三個步驟:

  1. 新增類似於上面的 add_column-migration,但不設定預設值
  2. 在應用程式執行時,在 rake 任務或控制檯上部署和更新列。確保你的應用程式已將資料寫入該列以獲取新的/更新的行。
  3. 新增另一個 change_column 遷移,然後將該列的預設值更改為所需的預設值