Redshift - 如何删除NOT NULL约束?

时间:2015-04-09 11:12:07

标签: sql amazon-redshift

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

3 个答案:

答案 0 :(得分:24)

你不能改变桌子。

还有另一种方法。您可以使用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;

答案 1 :(得分:8)

无法更改 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;

答案 2 :(得分:1)

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

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

在DROP COLUMN语句的末尾添加 CASCADE 将解决此问题。只要确保另一个对象不首先依赖它即可。

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 语句中的表名之前添加了架构名