Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 15/10/2007, 16h33   #1
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Par défaut échec ALTER TABLE

Bonjour,

Je suis passé à postgresql depuis qlq temps, et me voilà confronté à un premier soucis : Je veux changer le type d'un champ de type "character varying(22)" en "character varying(255)".
J'ai donc voulu exécuter :

Code :
1
2
 
ALTER TABLE lestruc ALTER COLUMN truc_id TYPE character varying(255);
ce qui me renvoie :

Code :
1
2
 
ERROR:  syntax error at OR near "TYPE" at character 40
J'ai testé d'autres syntaxes, toutes ont échouées. J'ai aussi vidée la table et vérifié s'il n'y avait pas d'éventuelles constraints mais non...

Help please

merci
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2007, 19h11   #2
Membre habitué
 
Inscription : août 2007
Messages : 128
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 128
Points : 146
Points : 146
La requête que tu donnes est bonne... pour les versions 8.0 et ultérieures. Donc, si tu es sur une 7.4, ce que je suppose, tu aboutis au message d'erreur que tu as reçu.

Le seul moyen est donc d'ajouter la colonne avec le bon type, de mettre à jour la valeur à la valeur de l'ancienne colonne, puis de supprimer l'ancienne colonne. Le tout dans une transaction pour éviter que les autres utilisateurs ne fassent de bêtises

Un truc comme ça :

Code :
1
2
3
4
5
6
BEGIN;
ALTER TABLE lestruc ADD COLUMN truc_id_new character varying(255);
UPDATE lestruc SET truc_id_new=truc_id;
ALTER TABLE lestruc DROP COLUMN truc_id;
ALTER TABLE lestruc RENAME COLUMN truc_id_new TO truc_id;
END;
Évidemment, ce code doit être modifié pour gérer des contraintes que j'ignorerais mais l'idée est là.
gleu_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/10/2007, 19h18   #3
Membre éclairé
 
Avatar de speedev
 
Développeur Web
Inscription : mai 2006
Messages : 936
Détails du profil
Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : mai 2006
Messages : 936
Points : 347
Points : 347
Je craignais qu'on me réponde ceci...
Merci!
__________________
Développeur indépendant sur technos Web à votre service
speedev est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h29.


 
 
 
 
Partenaires

Hébergement Web