Amazon redshift 如何复制标识字段?

Amazon redshift 如何复制标识字段?,amazon-redshift,Amazon Redshift,我想更新表的一些参数,比如dist和sort键。为此,我重命名了表的旧版本,并使用新参数重新创建了表(一旦创建了表,就不能更改这些参数) 我需要保留旧表中的id字段,这是一个标识字段。但是,如果尝试以下查询,则会出现错误: insert into edw.my_table_new select * from edw.my_table_old; ERROR: cannot set an identity column to a value [SQL State=0A000] 如何从旧表中保留相

我想更新表的一些参数,比如dist和sort键。为此,我重命名了表的旧版本,并使用新参数重新创建了表(一旦创建了表,就不能更改这些参数)

我需要保留旧表中的id字段,这是一个标识字段。但是,如果尝试以下查询,则会出现错误:

insert into edw.my_table_new select * from edw.my_table_old;
ERROR: cannot set an identity column to a value [SQL State=0A000] 
如何从旧表中保留相同的id?

您不能插入设置标识列的数据,但可以使用命令从S3加载数据

首先,您需要使用创建源表的转储

然后简单地使用参数,如中所述:

如果列列表中包含标识列,则显式的 选项也必须在COPY命令或COPY命令中指定 将失败。类似地,如果从列中省略标识列 列表,并指定显式_id选项,则复制操作 将失败


您可以显式指定列,并忽略标识列:

插入到现有的_表(col1,col2)中,从另一个_表中选择col1,col2;

使用两次,第一次使用IGNOREEXTRA,第二次使用FILLTARGET

如果目标表包含源中不存在的列 表,包括FILLTARGET。该命令将填充列表中的额外列 具有默认列值或标识值的源表, 如果定义了一个,则为空

它以极快的速度将列从一个表移动到另一个表;在dc1.large节点中为1GB表花费了我4s的时间

通过从现有源移动数据将行追加到目标表 表。

ALTER TABLE APPEND通常比类似的CREATE TABLE快得多 因为数据是移动的,而不是重复的,所以将其作为或插入到操作中


比使用显式ID卸载+复制更快、更简单。

使用,请参阅,它更快、更简单。2naviram:您的方法对IDENTITY column:/(使用“Columns Not match”错误,即使表定义相同。使用“CREATE table test(类似于源代码,包括默认值)”创建)谢谢,这正是我在使用redshiftt时所需要的。只有当源表和目标表属性匹配时,这才有效。这包括DistKey和SortKey。因为原始海报提到他们特别想要更改DistKey和SortKey,所以这种方法不适用于他们的场景。它也不会将旧表的identity列的值复制到新表的identity列中。相反,它允许新表生成新的标识值,这些标识值可以(也可能会)不同于旧的标识值。(APPEND当然很有用,而且很快,但作为这个问题的用例的答案,它完全没有用处。)
您不能追加标识列。如果两个表都包含标识列,则该命令将失败。如果只有一个表具有标识列,请包括FILLTARGET或IGNOREXTRA参数。有关更多信息,请参阅ALTER TABLE APPEND用法说明。