Amazon RedShift Drop Default

时间:2015-06-19 09:49:09

标签: sql amazon-redshift

我想在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。这会让这变得不可能吗?

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

  • 使用新架构(包括NOT NULL)
  • 创建一个新表
  • 使用伪默认硬编码
  • INSERT INTO new_table
  • 放下旧桌子
  • 重命名新的

例如

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