【问题标题】:How to alter new not null column in Postgresql?如何在 Postgresql 中更改新的非空列?
【发布时间】:2017-04-30 09:41:04
【问题描述】:

我有一个表要添加新的not null varchar(255)

我的查询是:

alter table poll_management.DASHLETS add column name varchar(255) not null;
update poll_management.DASHLETS as dashlet set name = report.name 
from poll_management.REPORTS as report
WHERE dashlet.id = report.reportdashletid 

但我有一个错误:

ERROR:  column "name" contains null values
********** Error **********

ERROR: column "name" contains null values
SQL state: 23502

【问题讨论】:

  • 要么添加空列,然后更新值并更改为非空,要么添加非空默认'somevalue'列;
  • 您已将“name”列添加为非空,并且根据错误,它说在报告表中“name”列的某些值为空。

标签: sql postgresql sql-null


【解决方案1】:

为避免您的错误,同时提供两种解决方案:

BEGIN;
  alter table poll_management.DASHLETS add column name varchar(255);
  update poll_management.DASHLETS as dashlet set name = report.name 
from poll_management.REPORTS as report;
  --mind I removed where, cos you need to update ALL rows to have some avlue
  alter table poll_management.DASHLETS alter column "name" set not null;
END;

和其他:

  alter table poll_management.DASHLETS add column name varchar(255) NOT NULL default 'not set';

【讨论】:

  • 我认为查询alter table poll_management.DASHLETS alter column "name" not null;必须改成SET not null
【解决方案2】:

我发现我的查询必须更改为:

alter table poll_management.DASHLETS add column name varchar(255) not null DEFAULT 'value';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-18
    • 2021-12-26
    • 2012-11-18
    • 1970-01-01
    • 2010-11-09
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多