更新现有表时出现空约束错误

时间:2019-11-06 07:58:31

标签: sql postgresql

我的数据库中有一个现有的表vault,其中有一些数据。现在,我在表is_master中添加了新列,该列告诉某些保管库是否是主保管库。我使用的SQL是:

ALTER TABLE vault ADD COLUMN is_master BOOLEAN NOT NULL;

UPDATE vault
    SET is_master = (name = 'Master');

但是,在对现有数据库进行此迁移之后,出现一些空约束错误,我无法弄清原因。

ERROR: column \"is_master\" contains null values

有人可以帮助我了解问题所在吗?

2 个答案:

答案 0 :(得分:2)

首先添加允许为空的列

ALTER TABLE vault ADD COLUMN is_master BOOLEAN

然后更新所有行

UPDATE vault
    SET is_master = name is not null and name = 'Master'

然后使其不为空

ALTER TABLE vault
    ALTER COLUMN is_master SET NOT NULL

答案 1 :(得分:0)

您的名称列中有空条目。尝试以下方法过滤掉空名称,然后设置从名称获取的值。默认情况下,您可以在更改

时将值设置为false
       ALTER TABLE vault ADD COLUMN 
         is_master BOOLEAN NOT NULL
         Set Default FALSE;

      UPDATE vault
       SET is_master = (name = 'Master')
       where name is not null