You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何同时修改列的默认值并设置NOT NULL非空约束?

问题原因说明

ADD COLUMN和ALTER COLUMN的语法规则完全不同:

  • 新增列时ADD COLUMN支持在同一段声明里依次指定数据类型、默认值、约束等多个属性,所以你看到的示例可以正常运行
  • 修改已有列属性时,单条ALTER COLUMN子句仅支持执行一种修改操作,你直接将默认值设置和非空约束拼接在同一句里,不符合语法规范,因此触发报错。

别人提供的SET DEFAULT false IS NOT NULL写法实际是将列的默认值设置为了表达式false IS NOT NULL的运算结果(值为true),完全不符合你要设置默认值为false的需求,不要使用。

正确实现方式

你不需要拆分执行多条ALTER TABLE语句,在同一条语句里声明两个ALTER COLUMN子句即可同时完成两项修改:

ALTER TABLE signedcodeofconduct
  ALTER COLUMN affirmed SET DEFAULT false,
  ALTER COLUMN affirmed SET NOT NULL;

注意:如果当前affirmed列已经存在NULL值,执行上述语句会触发非空约束报错,需要先执行更新语句将所有NULL值修正为合法非空值后再执行约束设置。

内容的提问来源于stack exchange,提问作者Jürgen Gmach

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:06:03