Alter column data type in Amazon Redshift

前端 未结 9 985
攒了一身酷
攒了一身酷 2020-12-12 20:45

How to alter column data type in Amazon Redshift database?

I am not able to alter the column data type in Redshift; is there any way to modify the data type in Amazo

相关标签:
9条回答
  • 2020-12-12 21:22

    to avoid the schema change mentioned by 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;
    
    0 讨论(0)
  • 2020-12-12 21:26

    Redshift being columnar database doesn't allow you to modify the datatype directly, however below is one approach this will change the column order.

    Steps -

    1.Alter table add newcolumn to the table 2.Update the newcolumn value with oldcolumn value 3.Alter table to drop the oldcolumn 4.alter table to rename the columnn to oldcolumn

    If you don't want to alter the order of the columns then solution would be to

    1.create temp table with new column name

    1. copy data from old table to new table.

    2. drop old table

    3. rename the newtable to oldtable

    4. One important thing create a new table using like command instead simple create.

    0 讨论(0)
  • 2020-12-12 21:31
    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;
    
    0 讨论(0)
  • 2020-12-12 21:31

    This method works for converting an (big) int column into a varchar

    -- Create a backup of the original table
    create table original_table_backup as select * from original_table;
    
    -- Drop the original table, and then recreate with new desired data types
    drop table original_table;
    
    create table original_table (
      col1 bigint,
      col2 varchar(20) -- changed from bigint
    );
    
    -- insert original entries back into the new table
    insert into original_table select * from original_table_backup;
    
    -- cleanup
    drop original_table_backup;
    
    0 讨论(0)
  • 2020-12-12 21:40

    (Recent update) It's possible to alter the type for varchar columns in Redshift.

    ALTER COLUMN column_name TYPE new_data_type
    

    Example:

    CREATE TABLE t1 (c1 varchar(100))
    
    ALTER TABLE t1 ALTER COLUMN c1 TYPE varchar(200)
    

    Here is the documentation link

    0 讨论(0)
  • 2020-12-12 21:40

    If you don't want to change the column order, an option will be creating a temp table, drop & create the new one with desired size and then bulk again the data.

    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;
    

    The only problem recreating the table is that you will need to grant again permissions and if the table is too bigger it will take a piece of time.

    0 讨论(0)
提交回复
热议问题