添加具有默认值的列

以下示例将 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 迁移,然后将该列的默认值更改为所需的默认值