Sql AWS红移-将标识列添加到现有表

Sql AWS红移-将标识列添加到现有表,sql,amazon-redshift,Sql,Amazon Redshift,在AWS红移中,尝试使用命令将标识列添加到现有表时 ALTER TABLE table_name ADD COLUMN id bigint IDENTITY(1,1); 我得到以下错误 错误:ALTER TABLE ADD COLUMN不支持具有类型标识的列 这显然意味着这在红移中是不允许的。我需要放下并重新创建表吗?或者是否有一些解决方案可以在红移中完成此操作?您必须在表声明期间添加IDENTITY列。以后不能再添加它 文件: 不能使用ALTER TABLE ADD COLUMN命令修改以下

在AWS红移中,尝试使用命令将标识列添加到现有表时

ALTER TABLE table_name ADD COLUMN id bigint IDENTITY(1,1);
我得到以下错误

错误:ALTER TABLE ADD COLUMN不支持具有类型标识的列


这显然意味着这在红移中是不允许的。我需要放下并重新创建表吗?或者是否有一些解决方案可以在红移中完成此操作?

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

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

    UNIQUE

    PRIMARY KEY

    REFERENCES (foreign key)

    IDENTITY

如果您只想向现有表中添加一个唯一的列,则以下操作可能很有用:

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

请务必注意,此解决方法仅适用于向现有数据添加标识列。当添加新行时,它不会自动递增。

虽然不能直接递增,但只需几个步骤即可完成。如果我们将现有表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;
最后将新表重命名为原始表:

DROP TABLE t1
ALTER TABLE t2
RENAME TO t1;

是的,事实上,这是Redshift的实现与Postgres相比的少数几个差异之一。您可以在此处看到,红移不支持串行: