From: | Stéphane Bunel <stephane+pgfr(at)bpf(dot)st> |
---|---|
To: | Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr> |
Cc: | pgsql-fr-generale(at)postgresql(dot)org |
Subject: | Re: Conversion d'une colonne text vers integer |
Date: | 2009-09-26 09:31:14 |
Message-ID: | 4ABDDF62.3090905@bpf.st |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-fr-generale |
Samuel ROZE a écrit :
> Bonjour à tous,
>
> Pour des questions de performances et taille, j'ai une colonne "colonne"
> dans ma base de données qui contient des valeurs varchar(50) et des
> NULL.
>
> Je les ai convertie avec une fonction schema.uniqueValue qui retourne
> l'ID de la valeur dans une table "valeurs" :
>
> UPDATE schema.matable SET colonne = schema.uniqueValue(colonne) WHERE
> colonne IS NOT NULL;
>
> Maintenant, je n'ai que des valeurs sous formes d'entiers et des NULL.
> Je voudrais donc changer le type de ma colonne pour "integer". Or, quand
> je fait:
>
> ALTER TABLE schema.matable ALTER COLUMN colonne TYPE integer;
>
> J'ai l'erreur:
>
> ERREUR: la colonne « colonne » ne peut pas être convertie vers le type
> pg_catalog.int4
>
> Il y a-t-il une autre méthode de faire ?
Oui, "à l'ancienne"
1. Créer une colonne temporaire de type entier
2. Copier les données de la 1er colonne vers la seconde en appliquant
une conversion de type.
3. Détruire la 1er colonne après moult et moult vérifications
4. Renommer la colonne temporaire qui viendra prendre la place de
l'ancienne.
Y a sûrement mieux aujourd'hui ! Mais ça fonctionne encore.
Stéphane.
From | Date | Subject | |
---|---|---|---|
Next Message | Samuel ROZE | 2009-09-26 09:38:23 | Re: Conversion d'une colonne text vers integer |
Previous Message | Samuel ROZE | 2009-09-26 09:23:48 | Conversion d'une colonne text vers integer |