Redshift - 如何删除 NOT NULL 约束?

Redshift - How to remove NOT NULL constraint?

由于 Redshift 不支持 ALTER COLUMN,我想知道是否可以从 Redshift 中的列中删除 NOT NULL 约束。

您无法更改 table。

还有一个替代方法。您可以使用 NULL 约束创建一个新列。将旧列中的值复制到此新列,然后删除旧列。

像这样:

ALTER TABLE table1 ADD COLUMN somecolumn (definition as per your reqm);
UPDATE table1 SET somecolumn = oldcolumn;
ALTER TABLE table1 DROP COLUMN oldcolumn;
ALTER TABLE table1 RENAME COLUMN somecolumn TO oldcolumn;

无法在 Redshift 上更改列。

我可以建议您创建新列,将值从旧列复制到新列并删除旧列。

ALTER TABLE Table1 ADD COLUMN new_column (___correct_column_definition___);
UPDATE Table1 SET new_column = column;
ALTER TABLE Table1 DROP COLUMN column;
ALTER TABLE Table1 RENAME COLUMN new_column TO column;

接受的答案可能会产生错误:

cannot drop table <table_name> column <column_name> because other objects depend on it

在 DROP COLUMN 语句的末尾添加 CASCADE 将解决此问题,但是如果其他 table 是相关的,它可能会产生不必要的副作用就可以了。

ALTER TABLE table1 ADD COLUMN newcolumn (definition as per your reqirements);
UPDATE table1 SET newcolumn = oldcolumn;
ALTER TABLE table1 DROP COLUMN oldcolumn CASCADE;
ALTER TABLE schema_name.table1 RENAME COLUMN newcolumn TO oldcolumn;

我在这里找到了这个信息,当时接受的答案对我不起作用:https://forums.aws.amazon.com/message.jspa?messageID=463248

另请注意:当我尝试重命名列时,出现另一个错误: 关系不存在

为了解决这个问题,我在 RENAME COLUMN 语句

中的 table 名称前面添加了架构名称