【问题标题】:Adding a auto incremental column into existing redshift table将自动增量列添加到现有的 redshift 表中
【发布时间】:2015-06-05 19:29:39
【问题描述】:

我在 Redshift 中有一张桌子。

我想添加一个应该有增量值的列。我不想删除表并创建一个新表。

请建议在红移表中添加具有自动增量值的列的命令。

谢谢!!!

【问题讨论】:

标签: amazon-redshift


【解决方案1】:

无法将 IDENTITY 列添加到现有表中。

使用新的 IDENTITY 列创建一个新表并将数据复制到其中可能是最简单的方法。请注意,这些值不能保证单调增加 - 即可能存在间隙。

来自http://docs.aws.amazon.com/redshift/latest/dg/r_ALTER_TABLE.html

您不能使用 ALTER TABLE ADD COLUMN 命令修改以下内容 表和列属性:

独一无二

主键

REFERENCES(外键)

身份

【讨论】:

    【解决方案2】:

    使用 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)
    

    【讨论】:

      猜你喜欢
      • 2016-05-29
      • 2019-01-18
      • 2013-01-23
      • 2016-07-23
      • 2019-04-21
      • 2020-04-29
      • 2011-06-19
      相关资源
      最近更新 更多