AWS Redshift - 将IDENTITY列添加到现有表

时间:2015-05-21 14:47:25

标签: sql amazon-redshift

在AWS Redshift中,尝试使用命令将IDENTITY列添加到现有表时

ALTER TABLE table_name ADD COLUMN id bigint IDENTITY(1,1);

我收到以下错误

  

错误:ALTER TABLE ADD COLUMN不支持类型为IDENTITY

的列

这显然意味着Redshift中不允许这样做。我是否需要删除并重新创建表格?或者是否有一些解决方法可以在Redshift中完成此操作?

3 个答案:

答案 0 :(得分:5)

虽然您无法直接执行此操作,但您只需几步即可完成此操作。如果我们将现有的表t1定义为:

CREATE TABLE t1 (
c1 vachar(MAX),
c2 int
);

首先,创建一个与t1具有相同列的新表,但添加了要添加的标识列:

CREATE TABLE t2 (
id bigint IDENTITY(1,1),
c1 varchar(MAX),
c2 int
);

然后,将t1的所有行插入t2,填充标识列以外的每一列:

INSERT INTO t2 (c1, c2)
(SELECT * FROM t1);

现在我们可以删除原始表:

DROP TABLE t1

最后将新表重命名为原始表:

ALTER TABLE t2
RENAME TO t1;

答案 1 :(得分:4)

您必须在表声明期间添加IDENTITY列。而且您以后无法添加。

  

文档:       您不能使用ALTER TABLE ADD COLUMN命令来修改以下表和列属性:

    UNIQUE

    PRIMARY KEY

    REFERENCES (foreign key)

    IDENTITY

答案 2 :(得分:-2)

如果您要做的只是向现有表添加唯一列,则以下内容可能很有用:

CREATE TABLE tableWithId AS 
(SELECT ROW_NUMBER() OVER () AS id, * FROM originalTable)

请务必注意,此解决方法仅对将标识列添加到现有数据有效。添加新行时,它不会自动增量。