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

PostgreSQL Discussion :

[Disparition] Colonne fantôme ?


Sujet :

PostgreSQL

  1. #1
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut [Disparition] Colonne fantôme ?
    Bonjour à tous !

    J'essaie de faire quelque chose d'à priori assez simple : insérer des données dans une table, dont voici la définition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE public.country ( 
        countryID	int4 NOT NULL DEFAULT nextval('"country_countryID_seq"'::regclass),
        name     	varchar(150) NOT NULL,
        PRIMARY KEY(countryID)
    )
    Pour insérer mes données, je fais la requête suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into country(countryID, name) values (1, 'asdf');
    Et j'obtiens le message d'erreur suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ERROR: column "countryid" of relation "country" does not exist
    Comment est-ce possible ? J'ai bien vérifié, je n'ai pas fait de typo, rien ! Quelqu'un a-t-il déjà rencontré ce problème ?

    Merci d'avance !
    Wookai


  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2004
    Messages
    374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 374
    Points : 1 401
    Points
    1 401
    Par défaut
    Ca m'est une fois arrivé alors que je créais ma base de données: Je m'étais trompé dans le type d'un domaine que j'avais supprimé ( en cascade ) => j'ai du recréeer la colonne mais une erreur du même type se produisait.

    Comme j'étais occupé de créer la db, je me suis contenté de la dumper pour la recréer, je ne sais pas si c'est possible pour toi ... Essaie peut-être de supprimer / recréer juste la table ( apparemment tu ne l'utilises pas encore en production ... )

  3. #3
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    Non non, je ne suis pas en prod !

    Je vais essayer ça dès que je peux... C'est quand même bizarre !

    Merci pour la réponse en tous cas !
    Wookai


  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 22
    Points : 13
    Points
    13
    Par défaut
    Salut
    Le problème vient des caractères majuscules dans le nom des colonnes. Il faut faire INSERT INTO table("countryID", .... ou n'utiliser que des minuscules

  5. #5
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    Donc ta solution est de mettre les noms des champs entre guillemet, ou alors changer le nom de la colonne pour tout mettre en minuscule ?

    La première solution me plairait mieux, mais le code est généré par Hibernate, je vais donc voir si je peux changer ça !
    Wookai


  6. #6
    jnore
    Invité(e)
    Par défaut
    La meilleure solution serait de mettre tous les champs en minuscule ainsi que les noms de tables.

    L'avantage sera, dans le cas où tu utiliseras par exemple PHP, d'éviter de mettre les anti-slashes devant chacun des guillemets. Cela te fera aussi une écriture plus propre.

  7. #7
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    C'est une solution... Mais je ne sais pas si c'est la meilleure !

    En effet, j'aime beaucoup séparer les différents mots par une majuscule, à la "java-style" : firstName, countryID, etc...

    Je trouve la solution "tout lowercase" moins jolie. De plus, comme mon code est généré à partir de ma base de données, ça me fait directement des attributs dans le même style pour mes classes (et mes noms de classes).
    Wookai


  8. #8
    jnore
    Invité(e)
    Par défaut
    Ca n'est bien sûr pas une règle.
    Pour ma part, je regrette d'avoir mis, à la création de ma base de données, des majuscules pour tous mes noms de tables.
    Quand je travaillais par odbc ça n'était pas génant, mais maintenant que j'attaque ma base en PHP, les choses ne sont plus les mêmes.
    Mon application web est massivement dédiée à l'accès aux données, ce qui fait que mon code est plus complexe à l'écriture.
    M'enfin....

  9. #9
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    Je suis d'accord que cela peut poser problème (par exemple, MySQL sous windows n'est pas sensible à la casse, mais sous Linux si, il me semble !).

    Je trouve juste bizarre qu'un détail comme ça pose autant de problème !
    Wookai


  10. #10
    Membre habitué Avatar de Wookai
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2004
    Messages
    307
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2004
    Messages : 307
    Points : 180
    Points
    180
    Par défaut
    Bon, après divers tests, c'est bien ça le problème : PostgreSQL veut que les champs qui contiennent autre chose que des lettres en minuscule soient entourés de guillemets !

    Par contre, j'ai trouvé comment faire pour que Hibernate ajoute ces guillemets : il suffit d'entourer le nom du champ de "backquotes" (`) dans le fichier de mapping, et c'est bon !

    Merci pour votre aide en tous cas !

    Sinon, pour jnore : si tu veux éviter d'avoir à échapper tous tes " dans tes requêtes SQL en PHP, il te suffit d'utiliser des guillemets simples (') pour déclarer des chaînes de caractères ! C'est plus simple, et aussi plus rapide pour PHP (il n'a pas à parcourir toute la chaîne à la recherche de variable à remplacer !).
    Wookai


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

Discussions similaires

  1. Disparition d'images et d'une colonne tableau
    Par RootsRagga dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 01/07/2009, 17h30
  2. Cryptage de colonnes sous Oracle
    Par Julian Roblin dans le forum SQL
    Réponses: 9
    Dernier message: 28/11/2006, 18h24
  3. [VB6] [Interface] ComboBox à plusieurs colonnes
    Par mtl dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 30/03/2004, 17h35
  4. JBuilder7 & JTable Colonne alignement
    Par Tonton Luc dans le forum JBuilder
    Réponses: 5
    Dernier message: 06/11/2002, 17h32
  5. StringGrid et colonnes
    Par Delph dans le forum Composants VCL
    Réponses: 2
    Dernier message: 02/08/2002, 11h35

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