gpt4 book ai didi

ruby-on-rails - 将没有默认值的 NOT NULL 字段添加到填充的数据库中

转载 作者:数据小太阳 更新时间:2023-10-29 07:05:08 24 4
gpt4 key购买 nike

我有一个表,我们称它为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 来实现。但是,我很想知道是否可以一次性完成。

最佳答案

您必须确保另一个表具有 my_table 中每个条目的 my_field 值。

class AddMyFieldToMyTable < ActiveRecord::Migration
def up
add_column :my_table, :my_field, :text
execute("insert into my_table(my_field) values (select my_field from different_table where my_table.id = different_table.different_id)")
change_column :my_table, :my_field, :text, null: false
end

def down
remove_column :my_table, :my_field
end
end

关于ruby-on-rails - 将没有默认值的 NOT NULL 字段添加到填充的数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22072730/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com