如何更改 PostgreSQL 中的列的默认值并且不允许同时使用 NULL?

J.G*_*.G. 2 postgresql

NOT NULL我尝试同时设置默认值和约束。

我想出了

ALTER TABLE signedcodeofconduct ALTER COLUMN affirmed SET DEFAULT false NOT NULL;
Run Code Online (Sandbox Code Playgroud)

这导致

ERROR:  syntax error at or near "NOT"
LINE 1: ...eofconduct ALTER COLUMN affirmed SET DEFAULT false NOT NULL;
Run Code Online (Sandbox Code Playgroud)

我想出了这个例子,因为我看到类似的语句有效,即

ALTER TABLE Snap ADD COLUMN private boolean DEFAULT false NOT NULL;
Run Code Online (Sandbox Code Playgroud)

仔细观察后,我注意到工作示例使用ADD COLUMN而不是ALTER COLUMN- 这可能就是区别。

那么,是否可以对一个列同时更改两件事?

在另一个地方我被建议使用

ALTER TABLE signedcodeofconduct ALTER COLUMN affirmed SET DEFAULT false IS NOT NULL;
Run Code Online (Sandbox Code Playgroud)

这会起作用,但并不完全相同。

小智 7

您可以使用单个 ALTER 语句来完成此操作,但需要重复 ALTER COLUMN 部分:

ALTER TABLE signedcodeofconduct 
   ALTER COLUMN affirmed SET NOT NULL,
   ALTER COLUMN affirmed SET DEFAULT false;
Run Code Online (Sandbox Code Playgroud)