我如何在Postgresql数据库中添加一个不允许为空的列?

24 浏览
0 Comments

我如何在Postgresql数据库中添加一个不允许为空的列?

我正在使用以下查询向我的Postgresql数据库添加一个新的“NOT NULL”列(已经过互联网清理):

ALTER TABLE mytable ADD COLUMN mycolumn character varying(50) NOT NULL;

每次运行此查询时,我都会收到以下错误消息:

ERROR:  column "mycolumn" contains null values

我很困惑。我哪里做错了?

注意:我主要使用pgAdmin III(1.8.4),但在终端内运行SQL时也收到了相同的错误。

admin 更改状态以发布 2023年5月20日
0
0 Comments

正如其他人所观察到的那样,您必须创建可空列或提供默认值。如果这不够灵活(例如,如果您需要对每一行单独计算新值),则可以利用在PostgreSQL中,所有DDL命令都可以在事务内执行的事实:

BEGIN;
ALTER TABLE mytable ADD COLUMN mycolumn character varying(50);
UPDATE mytable SET mycolumn = timeofday();    -- Just a silly example
ALTER TABLE mytable ALTER COLUMN mycolumn SET NOT NULL;
COMMIT;

0
0 Comments

你必须设定一个默认值。

ALTER TABLE mytable ADD COLUMN mycolumn character varying(50) NOT NULL DEFAULT 'foo';
... some work (set real values as you want)...
ALTER TABLE mytable ALTER COLUMN mycolumn DROP DEFAULT;

0