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

标签 sql postgresql

我的数据库中有一个现有表 vault,其中包含一些数据。我现在在表中添加了一个新列,is_master,它告诉我某个 vault 是否是 master vault。我使用的 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

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

最佳答案

首先添加允许空值的列

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

关于sql - 更新现有表时出现空约束错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58725476/

相关文章:

php - 组合来自不同表、具有不同字段名称的 2 个查询

SQL 将一个表的聚合结果作为查询中的一列返回

sql - BigQuery 模糊匹配连接或使用范围

sql - 计算每种奖励类型的平均值

postgresql - 插入原始表时聚合数据

c# - 在 NHibernate 中修改 SQL

mysql - 从两个表中选择数据

postgresql - 将 CentOS Postgresql 数据库连接到 Apache Tomcat

django - 连接到 redshift 中默认数据库以外的数据库

regex - 我如何为 postgresql 编写这个正则表达式?