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 :

Inconsistence de type de colonne: character varying et character varying(30)


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut Inconsistence de type de colonne: character varying et character varying(30)
    Bonjour,

    Pour mon application, j'ai créé un fichier SQL de patch qui ajoute des colonnes à des table préalablement créées :

    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
    17
    18
    19
    20
    21
    22
    23
    CREATE OR REPLACE FUNCTION add_col(
      _tbl VARCHAR,  -- Table                                                                                                                                                                                      
      _col VARCHAR,  -- Column to add                                                                                                                                                                              
      _type regtype -- Type of that column                                                                                                                                                                         
    ) RETURNS BOOL AS $$
    BEGIN
      -- Returns true if column has been added; false otherwise.                                                                                                                                                   
      IF EXISTS (SELECT DISTINCT column_name
                 FROM information_schema.columns
                 WHERE table_schema LIKE current_schema and table_name LIKE _tbl and column_name LIKE _col
                )
      THEN
         -- Column already exists in that table of that schema: do nothing.                                                                                                                                        
         RETURN false;
      END IF;
     
      -- Add column                                                                                                                                                                                                
      EXECUTE 'ALTER TABLE ' || _tbl || ' ADD COLUMN ' || _col || ' ' || _type;
     
      RETURN true;
    END; $$ language 'plpgsql';
     
    SELECT add_col('ack_event', 'user_name', 'VARCHAR(30)');
    L'éxécution de ce bout de code crée une table user_name de type character varying. Si on fait un select sur ack_event on obtient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    | id     | user_name         |
    | bigint | character varying |
    |--------+-------------------+
    |        |                   |
    En revanche si la table ack_event est créée directement avec la colonne username (de type VARCHAR(30) comme sur le patch), le type affiché dans la base est : character varying(30).

    Un select donne alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    | id     | user_name             |
    | bigint | character varying(30) |
    |--------+-----------------------+
    |        |                       |
    Pourquoi le passage de type en argument de fonction crée cette inconsistence ? Y a-t-il un moyen de corriger ça et d'avoir character varying(30) dans tous les cas ?

  2. #2
    Membre averti
    Avatar de Heavy Metal Hero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2007
    Messages : 152
    Points : 333
    Points
    333
    Billets dans le blog
    13
    Par défaut
    I used a "text" type intead "regtype" to solve the problem

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

Discussions similaires

  1. Modifier Type de colonnes
    Par klael dans le forum Paradox
    Réponses: 6
    Dernier message: 25/05/2007, 16h50
  2. [JTable] définir le type des colonnes
    Par zozolh2 dans le forum Composants
    Réponses: 3
    Dernier message: 17/08/2005, 08h53
  3. Type de colonne : Les char deviennent des VarChar !?
    Par Giovanny Temgoua dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 29/06/2005, 13h21
  4. [tranformation du type des colonnes]
    Par viny dans le forum PostgreSQL
    Réponses: 7
    Dernier message: 18/03/2005, 09h46
  5. [VB6] Type de colonne Access sous VB ?
    Par jlvalentin dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 04/02/2005, 11h10

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