IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes PostgreSQL Discussion :

Tester existence colonne avant ajout


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 46
    Points
    46
    Par défaut Tester existence colonne avant ajout
    Bonjour,

    j'ai comme objectif de rédiger un script de migration entre deux bases de données d'une même application (de la v1 vers la v2).

    la v2 contient une nouvelle colonne dans une table et pour mettre à jour la v1, avant d'ajouter la colonne j'aimerai vérifier l'existence de celle ci :

    mon algo serait du genre.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    testExists newColumn 
    if testExists = false then
        ALTER TABLE myTable ADD COLUMN newColumn character varying(255);
    end if
    J'aimerais bien avoir un exemple de requête SQL qui me permettrait de faire ce genre de script de migration.

    Merci par avance.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 770
    Points : 52 723
    Points
    52 723
    Billets dans le blog
    5
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = ??? AND TABLE_NAME = ??? AND COLUMN_NAME = ???)
    THEN
        ALTER TABLE myTable ADD COLUMN newColumn character varying(255);
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 46
    Points
    46
    Par défaut
    Merci pour la réponse, j'ai testé votre requête et j'ai l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ERROR:  syntax error at or near "IF"
    LIGNE 1 : IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE...
              ^
     
    ********** Erreur **********
     
    ERROR: syntax error at or near "IF"
    État SQL :42601
    Caractère : 1
    Faut-il préfixer la commande if not exists par quelque chose ?

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 58
    Points : 46
    Points
    46
    Par défaut
    ayé c'est résolu en créant une fonction qui prend en paramètre le nom de la table cible et le nom de la colonne à créer.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    --creation function to add column in a table
    CREATE OR REPLACE FUNCTION addColumn (tableName VARCHAR, columnName VARCHAR, columnType VARCHAR) returns void AS $$
    declare
     
    begin
    	IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = tableName AND COLUMN_NAME = columnName)
    	THEN
    		ALTER TABLE tableName ADD COLUMN columnName columnType;
    	END IF;
    end;
     
    $$ LANGUAGE plpgsql;
     
    --appel fonction
    SELECT * FROM addColumn (CAST('matable' AS VARCHAR), CAST('macolonne' AS VARCHAR), CAST('character varying(255) DEFAULT NULL::character varying' AS VARCHAR));
    Merci pour le coup de pouce

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    La fonction telle quelle ne marchera pas du fait qu'on ne peut pas utiliser directement des noms de tables ou de colonnes passés en paramètres.
    Par exemple on ne peut PAS faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT colonnes FROM parametre WHERE champ=1
    alors qu'on peut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT colonnes FROM table WHERE champ=parametre
    Ceci est dû à la manière dont le langage plpgsql intègre les requêtes SQL.

    Pour contourner ça, il faut faire du sql dynamique, voir la commande EXECUTE et la fonction quote_ident()

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] tester existence valeur dans colonne
    Par tallent_e dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 26/11/2011, 15h44
  2. [AC-2007] controler existant avant ajout
    Par kukugrunge dans le forum IHM
    Réponses: 1
    Dernier message: 15/06/2010, 05h18
  3. Réponses: 2
    Dernier message: 21/05/2007, 18h55
  4. ajouter +1 à valeurs d'une colonne avant filtre élaboré
    Par robide dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 08/12/2006, 20h39
  5. Réponses: 1
    Dernier message: 14/11/2005, 16h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo