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 :

Requête insensible à la casse


Sujet :

PostgreSQL

  1. #1
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    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.

  2. #2
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    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/

  3. #3
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    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.

  4. #4
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    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/

  5. #5
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    Ca fait un peu boulet mais je n'ai pas compris comment fonctionne la requête, est ce que tu peux expliquer ?

  6. #6
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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/

  7. #7
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    Merci, ça fonctionne super.

  8. #8
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    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/

  9. #9
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    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 '_' ?

  10. #10
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    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/

  11. #11
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    Tu n'aurais pas une petite requête magique pour moi dans le même genre pour remplacer les espaces ?

  12. #12
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    Allez je suis dans un bon jour
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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/

  13. #13
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  14. #14
    Membre expérimenté Avatar de scheu
    Inscrit en
    Juin 2007
    Messages
    1 506
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 1 506
    Points : 1 734
    Points
    1 734
    Par défaut
    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/

  15. #15
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 149
    Points : 89
    Points
    89
    Par défaut
    Lol, bien joué.

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

Discussions similaires

  1. requête insensible à la casse
    Par oh_yeah dans le forum Requêtes
    Réponses: 2
    Dernier message: 21/01/2013, 17h36
  2. Rendre requête insensible à la casse
    Par pierrot67 dans le forum Bases de données
    Réponses: 4
    Dernier message: 21/02/2007, 18h53
  3. SQL champ texte UNIQUE insensible à la casse
    Par Mike@Nestor dans le forum Langage SQL
    Réponses: 8
    Dernier message: 17/10/2005, 08h31
  4. Recherche insensible à la casse ET insensible aux accents.
    Par Bernard Grosdoy dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 10/07/2005, 03h32
  5. Tri insensible à la casse [IB7]
    Par patquoi dans le forum Débuter
    Réponses: 4
    Dernier message: 02/06/2003, 08h56

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