Sql AWS红移-将标识列添加到现有表
在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命令修改以下
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相比的少数几个差异之一。您可以在此处看到,红移不支持串行: