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

MJ.*_*MJ. 6 sql amazon-redshift

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

ALTER TABLE table_name ADD COLUMN id bigint IDENTITY(1,1);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

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

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

gne*_*son 6

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

CREATE TABLE t1 (
c1 vachar(MAX),
c2 int
);
Run Code Online (Sandbox Code Playgroud)

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

CREATE TABLE t2 (
id bigint IDENTITY(1,1),
c1 varchar(MAX),
c2 int
);
Run Code Online (Sandbox Code Playgroud)

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

INSERT INTO t2 (c1, c2)
(SELECT * FROM t1);
Run Code Online (Sandbox Code Playgroud)

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

DROP TABLE t1
Run Code Online (Sandbox Code Playgroud)

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

ALTER TABLE t2
RENAME TO t1;
Run Code Online (Sandbox Code Playgroud)


Vor*_*Vor 5

您必须IDENTITY在表声明期间添加列。而且您以后不能添加它。

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

    UNIQUE

    PRIMARY KEY

    REFERENCES (foreign key)

    IDENTITY
Run Code Online (Sandbox Code Playgroud)