如何复制IDENTITY字段?

Dea*_*ean 7 amazon-redshift

我想更新表的一些参数,例如dist和sort键.为了做到这一点,我重新命名了旧版本的表,并使用新参数重新创建了表(一旦创建了表,就无法更改这些参数).

我需要保留旧表的id字段,这是一个IDENTITY字段.但是,如果我尝试以下查询,则会收到错误消息:

insert into edw.my_table_new select * from edw.my_table_old;
ERROR: cannot set an identity column to a value [SQL State=0A000] 
Run Code Online (Sandbox Code Playgroud)

如何从旧表中保留相同的ID?

Tom*_*icz 19

您不能INSERT数据设置IDENTITY列,但您可以使用COPY命令从S3加载数据.

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

然后只需使用带有EXPLICIT_IDS参数的COPY,如加载默认列值中所述:

如果列列表中包含IDENTITY列,则还必须在COPY命令中指定EXPLICIT_IDS选项,否则COPY命令将失败.同样,如果列列表中省略了IDENTITY列,并且指定了EXPLICIT_IDS选项,则COPY操作将失败.


mar*_*usb 6

您可以显式指定列,并忽略标识列: insert into existing_table (col1, col2) select col1, col2 from another_table;