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 15/05/2008, 14h11   #1
Membre du Club
 
Inscription : mai 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 149
Points : 53
Points : 53
Par défaut Requête insensible à la casse

Bonjour,
peut on désactiver la sensibilité à la casse des requêtes? Par exemple:

Ne fonctionnera pas si le champ est "Id" dans la base de donnée.
Or on m'a donné une base ou les champs sont écrit aléatoirement avec des majuscules ou sans ... c'est énervant.
bilou972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 17h10   #2
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
Essaie en mettant des guillements autour des noms de champs et tables, mais ça risque vite de devenir très lourd
Sinon, renomme tous les champs et/ou tables impactées pour conserver une norme que tu respecteras : tout en minuscules ou tout en majuscules
__________________
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 16/05/2008, 15h06   #3
Membre du Club
 
Inscription : mai 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 149
Points : 53
Points : 53
Exact, c'est très lourd et c'est ce que je voulais éviter.
Si il n'y a vraiment pas d'autres moyens, je renommerais mais je voulais aussi éviter ça car j'ai deux tables de 158 colonnes, et c'est également lourd de les renommer toutes les deux manuellement.
bilou972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2008, 16h18   #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
Tu peux générer dynamiquement les commandes sql à lancer
Suffit de faire une requête qui parcourt la vue du dictionnaire listant les colonnes, un truc du genre

SELECT 'alter table '||nomschema||'.'||nomtable||' rename '||nomcolonne||' to '||lower(nomcolonne)||';' from vue_pour_colonnes where nomcolonne <> lower (nomcolonne)

Comme ça tu obtiens le script à lancer

En tous les cas, avoir une base avec tous les noms d'objets (tables, colonnes, indexes, ...) en minuscules (ou tout en majuscules) est la solution la plus propre, plutôt que d'aller mettre des guillemets partout
__________________
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 16/05/2008, 16h49   #5
Membre du Club
 
Inscription : mai 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 149
Points : 53
Points : 53
Ca fait un peu boulet mais je n'ai pas compris comment fonctionne la requête, est ce que tu peux expliquer ?
bilou972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2008, 18h20   #6
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
Quelle version de Postgresql as-tu ?
Si dans la vue pg_attribute, les noms de colonnes sont bien en majuscules et/ou minuscules selon les cas, essaie un truc du genre
Code :
1
2
3
4
SELECT 'alter table '||a.schemaname||'.'||a.relname||' rename '||b.attname||' to  '||lower(b.attname)||';'
FROM pg_stat_user_tables a, pg_attribute b
WHERE a.relid = b.attrelid
AND b.attname <> lower(b.attname);
et lance les commandes résultantes, c'est beaucoup plus rapide que de renommer manuellement chaque colonne
__________________
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 19/05/2008, 14h56   #7
Membre du Club
 
Inscription : mai 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 149
Points : 53
Points : 53
Merci, ça fonctionne super.
bilou972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/05/2008, 18h02   #8
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
Par curiosité, quelle version de Postgres utilises-tu ?
Car moi j'ai une 8.2 et tout est mis en minuscules dans les vues même si j'ai créé la table en majuscules
__________________
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 19/05/2008, 18h09   #9
Membre du Club
 
Inscription : mai 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 149
Points : 53
Points : 53
J'utilise la version 8.2, mais si les noms de champs sont en majuscule c'est probablement par ce que je les ai récupéré d'une table MS access qu'un collègue à fait via un connecteur ODBC. Enfin c'est une hypothèse.

Sinon les noms de champs ont également quelquesfois des espaces, tu pense qu'il faut que je les enlève pour les remplacer par des underscore '_' ?
bilou972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2008, 09h54   #10
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
C'est peut-être lié à l'ODBC, mais bon c'est bizarre quand-même comme comportement
Sinon oui je te conseille de remplacer les espaces par des '_' sinon tu risques encore de devoir mettre des guillemets autour des noms de champs
__________________
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 20/05/2008, 14h07   #11
Membre du Club
 
Inscription : mai 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 149
Points : 53
Points : 53
Tu n'aurais pas une petite requête magique pour moi dans le même genre pour remplacer les espaces ?
bilou972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2008, 15h13   #12
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
Allez je suis dans un bon jour
Essaie ceci :
Code :
1
2
3
4
5
SELECT 'alter table '||a.schemaname||'.'||a.relname||
' rename "'||b.attname||'" to  '||REPLACE(b.attname,' ','_')||';'
FROM pg_stat_user_tables a, pg_attribute b
WHERE a.relid = b.attrelid
AND position(' ' IN b.attname) = 0;
Mais à voir si la syntaxe avec les guillemets fonctionne
__________________
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 26/05/2008, 14h34   #13
Membre du Club
 
Inscription : mai 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 149
Points : 53
Points : 53
Oui la syntaxe avec les guillemets fonctionne. Pour le critère de restriction, il faut qu'il soit différent de 0 car 0 = y'en a pas (Je dis ca pour les futurs intéréssés).

Code :
1
2
3
4
5
SELECT 'alter table '||a.schemaname||'."'||a.relname||
'" rename "'||b.attname||'" to  '||lower(REPLACE(b.attname,' ','_'))||';'
FROM pg_stat_user_tables a, pg_attribute b
WHERE a.relid = b.attrelid
AND position(' ' IN b.attname) != 0;
Merci scheu.
bilou972 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2008, 15h25   #14
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
Citation:
Envoyé par bilou972 Voir le message
Oui la syntaxe avec les guillemets fonctionne. Pour le critère de restriction, il faut qu'il soit différent de 0 car 0 = y'en a pas (Je dis ca pour les futurs intéréssés).
Effectivement je n'avais pas testé, c'était pour voir si tu suivais
__________________
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 26/05/2008, 16h00   #15
Membre du Club
 
Inscription : mai 2007
Messages : 149
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 149
Points : 53
Points : 53
Lol, bien joué.
bilou972 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 17h00.


 
 
 
 
Partenaires

Hébergement Web