更改Amazon Redshift中的列数据types

如何更改Amazon Redshift数据库中的列数据types?

我无法更改Redshift中的列数据types; 有没有办法修改Amazon Redshift中的数据types?

目前没有办法改变红移数据库中的列。

所有我能想到的是添加一个正确的数据types的新列,然后将所有数据从旧列插入一个新的,最后删除旧的列。

使用类似于以下的代码:

ALTER TABLE t1 ADD COLUMN new_column (___correct_column_definition___); UPDATE t1 SET new_column = column; ALTER TABLE t1 DROP COLUMN column; ALTER TABLE t1 RENAME COLUMN new_column TO column; 

将有一个模式更改 – 新添加的列将在表中最后(这可能是一个COPY语句的问题,请记住 – 您可以定义与COPY列顺序)

避免Tomasz提到的模式更改:

 BEGIN TRANSACTION; ALTER TABLE <TABLE_NAME> RENAME TO <TABLE_NAME>_OLD; CREATE TABLE <TABLE_NAME> ( <NEW_COLUMN_DEFINITION> ); INSERT INTO <TABLE_NAME> (<NEW_COLUMN_DEFINITION>) SELECT <COLUMNS> FROM <TABLE_NAME>_OLD; DROP TABLE <TABLE_NAME>_OLD; END TRANSACTION; 
 ALTER TABLE publisher_catalogs ADD COLUMN new_version integer; update publisher_catalogs set new_version = CAST(version AS integer); ALTER TABLE publisher_catalogs DROP COLUMN version RESTRICT; ALTER TABLE publisher_catalogs RENAME new_version to version; 

如果您不想更改列顺序 ,则会创build一个临时表,删除并创build具有所需大小的新表,然后重新批量处理数据。

 CREATE TEMP TABLE temp_table AS SELECT * FROM original_table; DROP TABLE original_table; CREATE TABLE original_table ... INSERT INTO original_table SELECT * FROM temp_table; 

重新创build表的唯一问题是,您将需要再次授予权限,如果表太大,则需要一段时间。