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 19/07/2007, 22h11   #1
Membre habitué
 
Avatar de Wookai
 
Étudiant
Inscription : septembre 2004
Messages : 309
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2004
Messages : 309
Points : 142
Points : 142
Envoyer un message via MSN à Wookai Envoyer un message via Skype™ à Wookai
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 :
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 :
INSERT INTO country(countryID, name) VALUES (1, 'asdf');
Et j'obtiens le message d'erreur suivant :

Code :
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

Wookai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 23h14   #2
Membre régulier
 
Inscription : juin 2004
Messages : 52
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 52
Points : 80
Points : 80
Envoyer un message via ICQ à Shepard Envoyer un message via MSN à Shepard
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 ... )
Shepard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 08h34   #3
Membre habitué
 
Avatar de Wookai
 
Étudiant
Inscription : septembre 2004
Messages : 309
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2004
Messages : 309
Points : 142
Points : 142
Envoyer un message via MSN à Wookai Envoyer un message via Skype™ à Wookai
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

Wookai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 15h36   #4
Invité régulier
 
Inscription : novembre 2004
Messages : 22
Détails du profil
Informations forums :
Inscription : novembre 2004
Messages : 22
Points : 6
Points : 6
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
stephane9422 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/07/2007, 15h39   #5
Membre habitué
 
Avatar de Wookai
 
Étudiant
Inscription : septembre 2004
Messages : 309
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2004
Messages : 309
Points : 142
Points : 142
Envoyer un message via MSN à Wookai Envoyer un message via Skype™ à Wookai
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

Wookai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2007, 11h31   #6
jnore
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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.
  Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2007, 11h45   #7
Membre habitué
 
Avatar de Wookai
 
Étudiant
Inscription : septembre 2004
Messages : 309
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2004
Messages : 309
Points : 142
Points : 142
Envoyer un message via MSN à Wookai Envoyer un message via Skype™ à Wookai
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

Wookai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2007, 11h58   #8
jnore
Invité(e)
 
Messages : n/a
Détails du profil
Informations forums :
Messages : n/a
Points : 0
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....
  Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2007, 12h06   #9
Membre habitué
 
Avatar de Wookai
 
Étudiant
Inscription : septembre 2004
Messages : 309
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2004
Messages : 309
Points : 142
Points : 142
Envoyer un message via MSN à Wookai Envoyer un message via Skype™ à Wookai
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

Wookai est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/07/2007, 15h31   #10
Membre habitué
 
Avatar de Wookai
 
Étudiant
Inscription : septembre 2004
Messages : 309
Détails du profil
Informations personnelles :
Âge : 26

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : septembre 2004
Messages : 309
Points : 142
Points : 142
Envoyer un message via MSN à Wookai Envoyer un message via Skype™ à Wookai
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

Wookai 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 03h58.


 
 
 
 
Partenaires

Hébergement Web