【发布时间】:2015-06-05 19:29:39
【问题描述】:
我在 Redshift 中有一张桌子。
我想添加一个应该有增量值的列。我不想删除表并创建一个新表。
请建议在红移表中添加具有自动增量值的列的命令。
谢谢!!!
【问题讨论】:
标签: amazon-redshift
我在 Redshift 中有一张桌子。
我想添加一个应该有增量值的列。我不想删除表并创建一个新表。
请建议在红移表中添加具有自动增量值的列的命令。
谢谢!!!
【问题讨论】:
标签: amazon-redshift
无法将 IDENTITY 列添加到现有表中。
使用新的 IDENTITY 列创建一个新表并将数据复制到其中可能是最简单的方法。请注意,这些值不能保证单调增加 - 即可能存在间隙。
来自http://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE.html:
您不能使用 ALTER TABLE ADD COLUMN 命令修改以下内容 表和列属性:
独一无二
主键
REFERENCES(外键)
身份
【讨论】:
使用 CREATE TABLE 添加带有标识列的新表,然后使用带有 FILLTARGET 修饰符的ALTER TABLE APPEND,然后删除原始表并重命名新表,非常快速和简单。
如果目标表包含源中不存在的列 表,包括 FILLTARGET。该命令填充额外的列 具有默认列值或 IDENTITY 值的源表, 如果定义了一个,则为 NULL。
它将列从一个表移动到另一个表,速度非常快,dc1.large 节点中的 1GB 表花了我 4 秒。
通过从现有源移动数据将行追加到目标表 表。
...
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)
【讨论】: