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 07/07/2008, 14h45   #1
Membre du Club
 
Inscription : avril 2008
Messages : 89
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 89
Points : 58
Points : 58
Par défaut DROP COLUMN IF EXISTS

Bonjour,

dans mes fonction de nettoyage de ma BDD j'utilise souvent des tournures du style DROP INDEX IF EXISTS, DROP TABLE IF EXISTS afin de ne pas lever d'erreur pour rien. Toutefois je ne sais pas comment faire de même pour la suppression des colonnes et des foreign key associées.

J'utilise : ALTER TABLE matable DROP COLUMN macolonne;

Comment faire pour conditionner cette commande par un test d'existence de la colonne en question ?

J'utilise sql ou plpgsql...
Je préférerai une méthode sans bloc de test explicite, toutefois je suis preneur de toute solution.

Cordialement,
VASAPANCH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2008, 11h25   #2
Futur Membre du Club
 
Homme
Inscription : mai 2002
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32

Informations forums :
Inscription : mai 2002
Messages : 45
Points : 16
Points : 16
Bonjour,
Voila exactement ce que je recherche.
Si qqun à la solution...
chezjm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2008, 14h35   #3
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
Tu peux tester :
Code :
1
2
3
4
SELECT count(*) FROM pg_attribute a, pg_stat_user_tables b 
WHERE a.attrelid = b.relid 
AND b.relname = '<nom_table>' 
AND a.attname = '<nom_champ'>;
Si ça renvoie 0, c'est que la colonne n'existe pas dans la table, si ça renvoie 1 c'est qu'elle existe
__________________
La théorie, c'est quand on sait tout mais que rien ne fonctionne.
La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2008, 14h38   #4
Membre Expert
 
Avatar de scheu
 
Inscription : juin 2007
Messages : 1 497
Détails du profil
Informations forums :
Inscription : juin 2007
Messages : 1 497
Points : 1 485
Points : 1 485
Ou bien dans un bloc pl/pgsql, fais ta commande "alter table ... drop column ..." et gère les exceptions pour dire de ne rien faire ou de continuer quand-même s'il y a une erreur
__________________
La théorie, c'est quand on sait tout mais que rien ne fonctionne.
La pratique, c'est quand tout fonctionne mais que personne ne sait pourquoi.
Ici, nous avons réuni théorie et pratique : Rien ne fonctionne ... et personne ne sait pourquoi !

Réplication de base avec Postgresql : http://scheu.developpez.com/tutoriel.../log-shipping/
scheu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/09/2008, 15h11   #5
Futur Membre du Club
 
Homme
Inscription : mai 2002
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32

Informations forums :
Inscription : mai 2002
Messages : 45
Points : 16
Points : 16
Citation:
Envoyé par scheu Voir le message
Ou bien dans un bloc pl/pgsql, fais ta commande "alter table ... drop column ..." et gère les exceptions pour dire de ne rien faire ou de continuer quand-même s'il y a une erreur
Ca c'est que j'ai essayé, mais j'ai beau catcher l'exception, ma transaction est tout de même avortée.
Je vais essayer l'autre solution, merci.
chezjm est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2008, 16h54   #6
Membre du Club
 
Inscription : avril 2008
Messages : 89
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 89
Points : 58
Points : 58
Par défaut Bigleu et inculte

Merci scheu pour ces deux méthodes. Comme j'ai des fonctions que je souhaites laisser en sql je vais me faire un petit wrapper autour de la première solution histoire de faciliter un peu la syntaxe lors de l'utilisation.

Je suis un peu bigleu et inculte... Où est pris cette belle tof qui te sers d'avatar ?

Merci pour la réponse....

J'oserai presque dire... et pour les foreign key ?
ALTER TABLE <ma_table> DROP CONSTRAINT IF EXISTS <ma_contrainte>;
mais bon je vais un peu chercher dans la doc des tables pg.
VASAPANCH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2008, 22h53   #7
Futur Membre du Club
 
Homme
Inscription : mai 2002
Messages : 45
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 32

Informations forums :
Inscription : mai 2002
Messages : 45
Points : 16
Points : 16
Citation:
Envoyé par VASAPANCH Voir le message
Je suis un peu bigleu et inculte... Où est pris cette belle tof qui te sers d'avatar ?
Je dirai Philadelphie, avec un boxeur au premier plan...
chezjm est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h59.


 
 
 
 
Partenaires

Hébergement Web