在AWS Redshift中,尝试使用命令将IDENTITY列添加到现有表时
ALTER TABLE table_name ADD COLUMN id bigint IDENTITY(1,1);
我收到以下错误
错误:ALTER TABLE ADD COLUMN不支持类型为IDENTITY
的列
这显然意味着Redshift中不允许这样做。我是否需要删除并重新创建表格?或者是否有一些解决方法可以在Redshift中完成此操作?
答案 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)
请务必注意,此解决方法仅对将标识列添加到现有数据有效。添加新行时,它不会自动增量。