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中完成此操作?
虽然您无法直接执行此操作,但您只需几步即可完成此操作.如果我们将现有的表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)
您必须IDENTITY在表声明期间添加列。而且您以后不能添加它。
文档:您不能使用ALTER TABLE ADD COLUMN命令来修改以下表和列属性:
Run Code Online (Sandbox Code Playgroud)UNIQUE PRIMARY KEY REFERENCES (foreign key) IDENTITY