【问题标题】:Redshift - How to remove NOT NULL constraint?Redshift - 如何删除 NOT NULL 约束?
【发布时间】:2023-03-11 08:40:02
【问题描述】:

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

【问题讨论】:

    标签: sql amazon-redshift


    【解决方案1】:

    您不能更改表格。

    还有一种替代方法。您可以创建一个具有 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;
    

    【讨论】:

    • 请注意,如果列是排序键的一部分,它将不起作用。不幸的是,在这种情况下,您必须重新创建表。
    • 请注意,无论原始列在哪里,您添加的列都会放在表的末尾,因此在列顺序很重要的情况下,您可能会遇到问题。
    【解决方案2】:

    没有办法改变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;
    

    【讨论】:

    • 我在 stackoverflow 中从未见过如此相似的答案:) 我接受了 Tripathi 的答案,因为他的答案较早发布,希望您不会介意。
    • 真的很有趣,答案很相似。我没有看到您没有发表评论,只是回答并留下了问题。没关系,祝你好运,编码愉快。
    【解决方案3】:

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

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

    【讨论】:

    • 如果 drop 列失败并显示该错误消息,则添加 CASCADE 产生不必要的副作用。注释Just make sure another object doesn't depend on it first. 毫无意义;如果另一个对象不依赖它,则不会出现错误消息...
    猜你喜欢
    • 2016-09-19
    • 1970-01-01
    • 2015-09-25
    • 1970-01-01
    • 2013-12-07
    • 2021-03-04
    • 2015-04-22
    • 1970-01-01
    • 2018-08-24
    相关资源
    最近更新 更多