将 postgres 列设置为默认值不为空而不更新

2024-01-11

有没有办法添加一个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(使用前将#替换为@)

将 postgres 列设置为默认值不为空而不更新 的相关文章

随机推荐