我在Redshift有一张桌子。
我想添加一个应该具有增量值的列。我不想放弃桌子并创建一个新桌子。
请建议在redshift表中添加具有自动增量值的列的命令。
谢谢!!!
答案 0 :(得分:1)
无法将IDENTITY列添加到现有表中。
使用新的IDENTITY列创建新表可能最简单,并将数据复制到其中。请注意,这些值不能保证单调增加 - 即可能存在间隙。
来自http://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE.html:
您无法使用ALTER TABLE ADD COLUMN命令修改以下内容 表和列属性:
UNIQUE
PRIMARY KEY
参考(外键)
IDENTITY
答案 1 :(得分:1)
使用CREATE TABLE添加带有标识列的新表,然后使用带有FILLTARGET修饰符的ALTER TABLE APPEND,然后删除原始表并重命名新表,它非常快速和简单。
如果目标表包含源中不存在的列 表,包括FILLTARGET。该命令填充了额外的列 源表具有默认列值或IDENTITY值, 如果定义了一个,或者为NULL。
它将列从一个表移动到另一个表,非常快,在dc1.large节点中为1GB表占用了4s。
通过从现有源移动数据将行添加到目标表 表。
...
ALTER TABLE APPEND通常比类似的CREATE TABLE快得多 AS或INSERT INTO操作,因为数据被移动,而不是重复。
/* This is your table to be modified */
CREATE TABLE t_original (a varchar);
INSERT INTO t_original VALUES ('v1'), ('v2');
/* Here are the steps to add IDENTITY column */
CREATE TABLE t_new (id BIGINT IDENTITY(0,1), a varchar);
ALTER TABLE t_new APPEND FROM t_original FILLTARGET;
DROP TABLE t_original;
ALTER TABLE t_new RENAME TO t_original;
/* Show the result */
SELECT * FROM t_original;
id | a
----+----
1 | v2
0 | v1
(2 rows)