Re: Conversion d'une colonne text vers integer

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.

In response to

Responses

Browse pgsql-fr-generale by date

  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