Re: Conversion d'une colonne text vers integer

From: Samuel ROZE <samuel(dot)roze(at)aliceadsl(dot)fr>
To: stephane+pgfr(at)bpf(dot)st
Cc: pgsql-fr-generale(at)postgresql(dot)org
Subject: Re: Conversion d'une colonne text vers integer
Date: 2009-09-26 09:38:23
Message-ID: 1253957903.4451.4.camel@samuel-laptop
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-fr-generale

Hé bien s'il n'y a que ça, c'est ce que je vais faire :-)

Merci !

Le samedi 26 septembre 2009 à 11:31 +0200, Stéphane Bunel a écrit :
> 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

Browse pgsql-fr-generale by date

  From Date Subject
Next Message Daniel Verite 2009-09-26 11:22:09 Re: Conversion d'une colonne text vers integer
Previous Message Stéphane Bunel 2009-09-26 09:31:14 Re: Conversion d'une colonne text vers integer