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 名称前面添加了架构名称
由于 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 名称前面添加了架构名称