【发布时间】:2014-03-31 03:08:51
【问题描述】:
我有一张桌子,我们称之为MyTable。它是 Postgresql 数据库的一部分。
MyTable 中有很多条目,比方说超过一百万。我想在这个表中添加一个字段,我们称之为MyNewField。它将由 ActiveRecord 迁移添加。
该字段没有默认值并且不能为空。结果,在它的迁移类中会是这样的:
class AddMyFieldToMyTable < ActiveRecord::Migration
def change
add_column :my_table, :my_field, :text, null: false
end
end
但是,它会触发错误 (PG::NotNullViolation),因为表已经包含行,所有行都将 MyField 设置为 NULL。
我想要做的是:添加没有默认值且可为空设置为 false 的行(不触发 PG::NotNullViolation)。然后,将另一个表中的值插入到每条记录中。
这可能可以通过添加可空设置为 true 的字段,然后添加值,然后将可空设置更改回 false 来实现。不过,我很想知道是否可以一次性完成。
【问题讨论】:
标签: ruby-on-rails ruby rails-activerecord