有没有办法添加一个not null
约束到一列并用一个语句中的默认值替换所有现有的空值?
alter table t
alter column c set default 0,
alter column c set not null;
似乎不起作用,给出错误:
column "c" contains null values
其实,是。也很简单:
ALTER TABLE t
ALTER COLUMN c TYPE int USING (COALESCE(c, 0))
, ALTER COLUMN c SET DEFAULT 0
, ALTER COLUMN c SET NOT NULL;
数据库小提琴
你只需要思考一下。我们将类型更改为int
to int
,所以没有实际的改变。但它让我们可以潜入USING clause https://www.postgresql.org/docs/current/sql-altertable.html这很神奇。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)