如何使用现有数据创建一个新的非空列?

时间:2018-10-01 00:21:24

标签: ruby-on-rails activerecord

我正在一个uuid / guid表中创建一个新列。

add_column:users,:uuid,:string,null:false

我正在使用以下方法设置uuid:

SecureRandom.uuid

由于现有数据没有任何值,因此迁移失败。

在迁移过程中,如何为每个使用新uuid的用户设置值?

1 个答案:

答案 0 :(得分:2)

添加非空列时,您有2个选择:

  1. 提供数据库默认值
  2. 添加可为空的列,更新所有数据,将该列更改为不可为空。

根据您使用的数据库的不同,可能会也可能不允许您将表达式设置为默认值。

自从您提到使用Postgres以来,您可以阅读更多here 提供默认值的Rails语法将是

default: -> { 'uuid_generate_v1()' }