NOT NULL 约束要求默认值

Dyl*_*rce 4 postgresql amazon-redshift

使用 NOT NULL 约束向我的数据库添加一个新列,但 Redshift 提醒我应该定义一个默认值。我认为 NOT NULL 的重点是强制定义?

ALTER TABLE users add column
  name varchar(255) NOT NULL
;
Run Code Online (Sandbox Code Playgroud)

结果是:

[Amazon](500310) Invalid operation: ALTER TABLE ADD COLUMN defined as NOT NULL must have a non-null default expression;
Run Code Online (Sandbox Code Playgroud)

有没有办法强制列不能为空?

Wid*_*dor 7

NOT NULL是确保列包含值的正确方法。但是,因为您的表已经存在,其中已经存在的行将没有新name列的值,因此它们会违反NOT NULL约束。

通过指定默认值,您可以确保为任何现有行分配该值,从而符合您的NOT NULL约束。


th3*_*a1d 5

如果列是NOT NULL,它必须有一个值,对吗?

为什么不添加: DEFAULT default_expr

  • 那么,您将如何遵守 NOT NULL 约束?Downvote 是完全没有必要的。 (3认同)
  • 人们并不总是想要一个默认值。 (2认同)