97 votes

Modifier le type de données d'une colonne dans Amazon Redshift

Comment modifier le type de données d'une colonne dans une base de données Amazon Redshift ?

Je ne suis pas en mesure de modifier le type de données de la colonne dans Redshift ; existe-t-il un moyen de modifier le type de données dans Amazon Redshift ?

153voto

Tomasz Tybulewicz Points 2124

Comme indiqué dans le Documentation sur ALTER TABLE vous pouvez modifier la longueur de VARCHAR colonnes en utilisant

ALTER TABLE table_name
{
    ALTER COLUMN column_name TYPE new_data_type 
}

Pour les autres types de colonnes, tout ce à quoi je peux penser est d'ajouter une nouvelle colonne avec un type de données correct, puis d'insérer toutes les données de l'ancienne colonne dans la nouvelle, et enfin de supprimer l'ancienne colonne.

Utilisez un code similaire à celui-ci :

ALTER TABLE t1 ADD COLUMN new_column ___correct_column_type___;
UPDATE t1 SET new_column = column;
ALTER TABLE t1 DROP COLUMN column;
ALTER TABLE t1 RENAME COLUMN new_column TO column;

Il y aura un changement de schéma - la colonne nouvellement ajoutée sera la dernière dans une table (cela peut poser un problème avec COPY gardez cela à l'esprit - vous pouvez définir un ordre de colonne avec COPY )

50voto

Wolli Points 508

Pour éviter le changement de schéma mentionné par 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;

23voto

user0000 Points 329

(Mise à jour récente) Il est possible de modifier le type des colonnes varchar dans Redshift.

ALTER COLUMN column_name TYPE new_data_type

Exemple :

CREATE TABLE t1 (c1 varchar(100))

ALTER TABLE t1 ALTER COLUMN c1 TYPE varchar(200)

Voici la documentation lien

8voto

Franzi Points 824

Si vous je ne veux pas changer l'ordre des colonnes Si vous avez besoin d'une table temporaire, une option serait de créer une table temporaire, de la supprimer et de créer une nouvelle table de la taille souhaitée, puis de regrouper à nouveau les données.

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;

Le seul problème pour recréer la table est que vous devrez accorder à nouveau les permissions et si la table est trop grande, cela prendra un certain temps.

4voto

Anand Kumar Points 187
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;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X