由于Redshift不支持ALTER COLUMN
,我想知道是否可以从Redshift中的列中删除NOT NULL约束。
答案 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 语句中的表名之前添加了架构名