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

PostgreSQL中已存在列添加NOT NULL约束与默认值的方法

问题描述

先执行了以下SQL添加列:

ALTER TABLE sys.system_property
ADD COLUMN IF NOT EXISTS description text;
COMMENT ON COLUMN sys.system_property.description IS 'description of property';

之后想要给该列设置默认值并添加NOT NULL约束,执行了以下语句:

ALTER TABLE sys.system_property
ADD COLUMN IF NOT EXISTS description text NOT NULL DEFAULT 'Missing Description';
COMMENT ON COLUMN sys.system_property.description IS 'description of property';

但由于列已存在,语句被跳过,报错信息如下:

ALTER TABLE sys.system_property
ADD COLUMN IF NOT EXISTS description text NOT NULL DEFAULT 'Missing Description'
[2022-11-04 12:02:22] [42701] column "description" of relation "system_property" already exists, skipping

需要修改该列以添加所需约束和默认值。

解决方案

目标列已存在,不能再使用ADD COLUMN语句,需改用ALTER COLUMN修改列属性,操作步骤如下:

  1. 设置列的默认值
ALTER TABLE sys.system_property
ALTER COLUMN description SET DEFAULT 'Missing Description';
  1. 添加NOT NULL约束

注意:执行此步骤前,必须确保列中没有NULL值,否则会触发报错。若存在NULL值,先执行更新语句将其替换为默认值:

UPDATE sys.system_property
SET description = 'Missing Description'
WHERE description IS NULL;

完成更新后,再添加约束:

ALTER TABLE sys.system_property
ALTER COLUMN description SET NOT NULL;

也可以将设置默认值和添加约束合并为一条语句(前提是已处理好现有NULL值):

ALTER TABLE sys.system_property
ALTER COLUMN description SET DEFAULT 'Missing Description',
ALTER COLUMN description SET NOT NULL;

若需要重新确认列注释,可执行:

COMMENT ON COLUMN sys.system_property.description IS 'description of property';

内容的提问来源于stack exchange,提问作者guradio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 13:50:21