更改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表的唯一问题是,您将需要再次授予权限,如果表太大,则需要一段时间。