将没有默认值的NOT NULL字段添加到填充的DB中

弗朗西斯·博尚

我有一张桌子,叫它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。

我想做的是:添加没有默认值并将nullable设置为false的行(不触发PG :: NotNullViolation)。然后,将另一个表中的值插入每个记录。

通过添加可为null设置为true的字段,然后添加值,然后再更改为可为null设置为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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将没有默认值的NOT NULL字段添加到填充的DB中

来自分类Dev

这是将列表添加到另一个列表的好方法吗,如果源列表中没有值,则填充默认值

来自分类Dev

字段“区”没有默认值

来自分类Dev

字段没有默认值

来自分类Dev

字段没有默认值

来自分类Dev

将默认值的列添加到oracle中的现有表

来自分类Dev

将默认值添加到有序字典列表中

来自分类Dev

MySQL-字段<myfield>没有默认值

来自分类Dev

字段“ id”没有默认值django-registration

来自分类Dev

Hibernate引发SQLException“ id字段没有默认值”

来自分类Dev

Hibernate / SQLException:字段没有默认值

来自分类Dev

“ pic_name”字段没有默认值Laravel

来自分类Dev

常规错误:1364“发布”字段没有默认值

来自分类Dev

字段“ id”没有默认值django-registration

来自分类Dev

字段 "" 没有默认值 (laravel 5.6.33) (firstOrCreate)

来自分类Dev

Julia中没有自然默认值的命名参数

来自分类Dev

有什么办法可以区分Oracle中的“参数没有默认值”和“参数的默认值为null”

来自分类Dev

SQL字段没有默认值-即使字段设置为默认NULL

来自分类Dev

将NULL插入具有默认值的NOT NULL列

来自分类Dev

将具有默认值的列添加到大型表

来自分类Dev

将具有默认值的参数添加到虚拟方法

来自分类Dev

在Django 1.7中添加没有默认值的非空字段

来自分类Dev

将默认值添加到标签MVC .NET

来自分类Dev

为什么 sys.stdout(在 python 中)没有恢复到默认值的默认方法

来自分类Dev

动态将输入值(由用户键入)添加到另一个字段(具有默认值)

来自分类Dev

动态将输入值(由用户键入)添加到另一个字段(具有默认值)

来自分类Dev

MYSQL-将所有列的默认值设置为NULL,而未设置默认值的情况

来自分类Dev

使用两个存储过程填充临时表时,将具有默认值的列添加到临时表

来自分类Dev

Django ModelField在添加新字段时将默认值添加到基于同一模型中的另一个字段

Related 相关文章

  1. 1

    将没有默认值的NOT NULL字段添加到填充的DB中

  2. 2

    这是将列表添加到另一个列表的好方法吗,如果源列表中没有值,则填充默认值

  3. 3

    字段“区”没有默认值

  4. 4

    字段没有默认值

  5. 5

    字段没有默认值

  6. 6

    将默认值的列添加到oracle中的现有表

  7. 7

    将默认值添加到有序字典列表中

  8. 8

    MySQL-字段<myfield>没有默认值

  9. 9

    字段“ id”没有默认值django-registration

  10. 10

    Hibernate引发SQLException“ id字段没有默认值”

  11. 11

    Hibernate / SQLException:字段没有默认值

  12. 12

    “ pic_name”字段没有默认值Laravel

  13. 13

    常规错误:1364“发布”字段没有默认值

  14. 14

    字段“ id”没有默认值django-registration

  15. 15

    字段 "" 没有默认值 (laravel 5.6.33) (firstOrCreate)

  16. 16

    Julia中没有自然默认值的命名参数

  17. 17

    有什么办法可以区分Oracle中的“参数没有默认值”和“参数的默认值为null”

  18. 18

    SQL字段没有默认值-即使字段设置为默认NULL

  19. 19

    将NULL插入具有默认值的NOT NULL列

  20. 20

    将具有默认值的列添加到大型表

  21. 21

    将具有默认值的参数添加到虚拟方法

  22. 22

    在Django 1.7中添加没有默认值的非空字段

  23. 23

    将默认值添加到标签MVC .NET

  24. 24

    为什么 sys.stdout(在 python 中)没有恢复到默认值的默认方法

  25. 25

    动态将输入值(由用户键入)添加到另一个字段(具有默认值)

  26. 26

    动态将输入值(由用户键入)添加到另一个字段(具有默认值)

  27. 27

    MYSQL-将所有列的默认值设置为NULL,而未设置默认值的情况

  28. 28

    使用两个存储过程填充临时表时,将具有默认值的列添加到临时表

  29. 29

    Django ModelField在添加新字段时将默认值添加到基于同一模型中的另一个字段

热门标签

归档