如何在Postgresql中更改新的非空列?

17 浏览
0 Comments

如何在Postgresql中更改新的非空列?

我有一个表格,我想要添加一个新的not null varchar(255)列。\n我的查询语句是:\n

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 

\n但是我遇到了一个错误:\n

错误:列“name”包含空值
********** 错误 **********
错误:列“name”包含空值
SQL 状态:23502

0
0 Comments

问题的出现原因是需要在PostgreSQL中对一个新的非空列进行修改。解决方法是使用ALTER TABLE语句来添加该新列,并指定为非空,并设置一个默认值。

ALTER TABLE poll_management.DASHLETS ADD COLUMN name VARCHAR(255) NOT NULL DEFAULT 'value';

这条语句将在poll_management数据库的DASHLETS表中添加一个名为name的新列。该列的数据类型为VARCHAR(255),非空约束为NOT NULL,并设置一个默认值为'value'。

这样的修改操作可以确保在每次插入新行时,该列的值都不为空,并且如果没有指定值,则会使用默认值。这对于确保数据完整性和一致性非常重要。

使用ALTER TABLE语句可以在现有表中进行各种修改操作,包括添加、修改和删除列。在这种情况下,我们需要添加一个新的非空列,并设置默认值。

注意:在执行ALTER TABLE语句之前,请确保对数据库进行备份,以防止意外的数据丢失。

0
0 Comments

问题出现的原因是在Postgresql中,当向表中添加一个新的非空列时,必须给该列的所有现有行提供一个默认值。如果没有提供默认值,那么在更新所有现有行之前,添加非空列将会引发错误。

有两种解决方法:

第一种方法是先添加列,然后更新所有现有行以提供该列的默认值,最后将列设置为非空。具体操作如下:

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;

第二种方法是在添加列的同时指定默认值为'not set',并将列设置为非空。具体操作如下:

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`。

0