如何向已有的AWS Redshift表中添加SUPER类型列?
Redshift添加SUPER类型非空列解决方案
问题原因
向已有数据的Redshift表中添加带NOT NULL约束的列时,系统需要为所有现存行填充该列的初始值,未指定默认值就会触发你遇到的报错。
可选方案
方案1:分步骤操作(适用于需要自定义存量数据字段值的场景)
- 先添加允许空值的SUPER类型列
ALTER TABLE temp_test_persons ADD COLUMN newSuperColumn SUPER;
- 批量更新所有存量行的该列值,确保无空值
-- 示例默认填充空JSON对象,可根据业务需求替换为对应JSON结构 UPDATE temp_test_persons SET newSuperColumn = JSON_PARSE('{}') WHERE newSuperColumn IS NULL;
- 为列添加非空约束
ALTER TABLE temp_test_persons ALTER COLUMN newSuperColumn SET NOT NULL;
方案2:一步添加(适用于存量数据统一使用默认值的场景)
添加列时直接指定SUPER类型的默认值,可直接带上非空约束:
-- 默认填充空JSON对象 ALTER TABLE temp_test_persons ADD COLUMN newSuperColumn SUPER NOT NULL DEFAULT JSON_PARSE('{}'); -- 若存储JSON数组,可改为默认填充空数组 -- ALTER TABLE temp_test_persons ADD COLUMN newSuperColumn SUPER NOT NULL DEFAULT JSON_PARSE('[]');
后续操作提示
后续向该列写入JSON数据时,需要用JSON_PARSE()函数将字符串格式的JSON转换为SUPER类型后再插入,避免格式报错。
内容的提问来源于stack exchange,提问作者sogu
相关产品推荐
相关产品推荐

