我想在RedShift中向表中添加一个NOT NULL列。为此,我指定一个默认值,以便现有行知道要在新列中放入什么。但我不希望在此列上有默认值 - 如果我的COPY命令中没有提供数据,我希望它失败。在Postgres我可以这样做:
ALTER TABLE my_table ALTER COLUMN my_column DROP DEFAULT;
然而,Redshift给我一个错误ERROR: ALTER COLUMN SET/DROP DEFAULT is not supported
。
添加非空列,更新现有行以及没有默认值的正确方法是什么?
更新:似乎是Redshift won't allow any ALTER COLUMN statements。这会让这变得不可能吗?
答案 0 :(得分:1)
您可以执行以下操作:
例如
CREATE TABLE new_table
(column_1 type, column_2 type, new_column type NOT NULL);
INSERT INTO new_table (column_1, column_2, new_column)
SELECT column_1, column_2, 'default_value' FROM old_table;
DROP TABLE old_table;
ALTER TABLE new_table RENAME TO old_table;
答案 1 :(得分:-1)
您应该为零选择非空值,例如
alter table my_table
add column my_column int default 0