如果已存在null的记录,如何在seqeulize中添加非空约束?

时间:2018-04-14 16:26:23

标签: postgresql sequelize.js

我有一张桌子。

我添加了一个新专栏。

即使我在续集模型中设置了默认值,这些列仍然是空的。

所以我收到错误Unhandled rejection SequelizeDatabaseError: column "col_name" contains null values

如何在创建时使用默认值填充新列,这样就不会破坏空约束。

2 个答案:

答案 0 :(得分:1)

您可以先更新值:

update t
    set col_name = ?
    where col_name is null;

然后添加not null约束。

答案 1 :(得分:0)

  

即使我在续集模型中设置了默认值

我怀疑迁移和模型之间存在差异。要使用包含默认值的迁移插入列,请在迁移中使用defaultValue

以下是一个工作示例:

module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.addColumn('tests', 'new_column', {
      defaultValue: 'test',
      type: Sequelize.STRING
    })
  }
}

在运行sequelize db:migrate之前 enter image description here

sequelize db:migrate之后: enter image description here

optionsaddColumn对象的documentation很难找到,它列出了不同的方法