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 :

Traduction de MySql to PGSQL


Sujet :

Requêtes PostgreSQL

  1. #1
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut Traduction de MySql to PGSQL
    Bonjour,
    J'ai besoins de migrer une application utilisant base de données MySql vers du PGSQL...
    Mon soucis c'est que je n'y connais rien en PGSQL...
    Est ce qu'il existe un outil permettant de faire cela?

    Sinon, j'aurais besoins de traduire cette requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT date, SUM(count) AS total
    FROM link 
    GROUP BY left( date, 7 )
    HAVING Year(`date`) = MaDate;
    Dans cette requête, je récupère toutes les données de ma table "link", puis je les regroupent par années sans prendre en compte le mois...
    Une idée?

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 038
    Points : 23 783
    Points
    23 783
    Par défaut
    Bonjour,

    La colonne "date" est de quel type ? Date ou chaîne de caractères ?
    Parce que la fonction LEFT n'existe pas, mais en fonction du type de cette colonne, on peut t'indiquer la fonction la mieux adaptée (substring, to_char...).

    Au passage, c'est déconseillé d'utiliser des mots réservés pour nommer des colonnes (comme date, par exemple ).


    ced

  3. #3
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    Au passage, c'est déconseillé d'utiliser des mots réservés pour nommer des colonnes (comme date, par exemple ).
    En effet vraiment pas top...

    Mon champs date est de type date !
    J'ai donc essayé de faire cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    "SELECT date, SUM(count) AS total
    FROM link 
    Where  EXTRACT(ISOYEAR FROM date) = ".$i.
    "GROUP BY EXTRACT(ISOYEAR FROM date)";
    Dans cette requête mon $i correspondant à une variable php comprenant une année...
    Malheureusement j'obtient une erreur :
    Error in SQL query: ERREUR: la colonne � link.date � doit appara�tre dans la clause GROUP BY ou doit �tre utilis� dans une fonction d'agr�gat at character 8
    et je ne comprend pas pourquoi...

  4. #4
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    Après avoir avancé un peu, je pense que la requete que je cherche est celle-ci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT date, SUM(count) AS total
    FROM link 
    GROUP BY EXTRACT(MONTH FROM date)
    HAVING EXTRACT(ISOYEAR FROM date) = 2011
    M'ai j'obtient toujours le message d'erreur :
    ERREUR: la colonne « link.date » doit apparaître dans la clause GROUP BY ou doit être utilisé dans une fonction d'agrégat
    LINE 1: SELECT date, SUM(count) AS total
    Je ne comprend pas... Qu'elle est l'erreur?

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 038
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 038
    Points : 23 783
    Points
    23 783
    Par défaut
    L'erreur vient de fait qu'il n'y a plus concordance entre ce qui est dans SELECT et ce qui est dans GROUP BY.
    Dans la clause SELECT, tu as "date", alors que tu cherches à regrouper selon les mois.
    Il faut donc plutôt quelque chose comme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT EXTRACT(MONTH FROM date) AS mois, SUM(count) AS total
    FROM link 
    GROUP BY EXTRACT(MONTH FROM date)
    Au passage, le HAVING ne sert à rien dans le cas présent, il vaut mieux passer par la clause WHERE :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT EXTRACT(MONTH FROM date) AS mois, SUM(count) AS total
    FROM link 
    WHERE EXTRACT(ISOYEAR FROM date) = 2011
    GROUP BY EXTRACT(MONTH FROM date)
    ced

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 898
    Points : 53 136
    Points
    53 136
    Billets dans le blog
    6
    Par défaut
    Je suis toujours sidéré de voir la quantité monstrueuses de fautes qu'il y a dans les requêtes produites par les bidouilleurs de MySQL... (on ne peut pas appeler les gens qui font de telles requêtes des informaticiens, ni des développeurs, cela ferait honte aux professionnels !).

    Nombre d'erreurs dans cette requête au minimum 4 :
    1) date est un mot réservé de SQL. En principe on évite d'utiliser comme nom d'objet un mot réservé de SQL comme TYPE, DATE, CHAR, INDEX...
    2) LEFT est une fonction de chaine.... appliquée à une date ! Résultat ???
    3) on projette sur la colonne date complète (SELECT date) et on fait un groupage sur une partie de l'information de la colonne date (GROUP BY LEFT( date, 7))
    4) on utilise au petit bonheur la chance des caractères accent grave pour délimiter de temps en temps un nom de colonne (spécificité MySQL... imbécile car possibilité de confusion avec des chaines de caractères.

    Question : que fait cette requête ?

    Commencez par apprendre le SQL : mon site comme mon bouquin, peuvent vous y aider....

    A +

  7. #7
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    Merci beaucoup !
    Voici la version finale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT EXTRACT(MONTH FROM date) AS mois,  SUM(count) AS total
    FROM link 
    WHERE EXTRACT(ISOYEAR FROM date) = " .$i."
    GROUP BY EXTRACT(MONTH FROM date)
    ORDER BY EXTRACT(MONTH FROM date)";

  8. #8
    Expert confirmé
    Avatar de ludojojo
    Homme Profil pro
    Développeur SharePoint
    Inscrit en
    Avril 2008
    Messages
    2 967
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur SharePoint
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 967
    Points : 5 347
    Points
    5 347
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par SQLpro Voir le message
    Je suis toujours sidéré de voir la quantité monstrueuses de fautes qu'il y a dans les requêtes produites par les bidouilleurs de MySQL...
    Je suis un peu décu de voir votre réaction.
    Pour information, je suis développeur SharePoint, donc oui je fais de la bidouille quand il s'agit de php et de mysql!
    Je n'avais encore jamais travaillé avec ces deux langages et étant donné que chaque langage à ses propres spécificités, cela est assez difficile d'en appréhender les nuances.
    Je commence tout juste à me familliariser avec ces technologies, il est donc normal d'avoir des erreurs. Pour rappel, c'est pour cela que l'on viens sur les forums, demander de l'aide aux personnes qui sont compétantes!

    Au passage, un grand merci à "ced" pour son aide.

  9. #9
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 898
    Points : 53 136
    Points
    53 136
    Billets dans le blog
    6
    Par défaut
    Ce que je reproche à beaucoup de développeurs, c'est de se plonger dans le SQL sans jamais l'avoir appris et après solliciter les copains pour des erreurs ignobles de plus que débutant. Vous viendrais t-il à l'esprit de vous vendre en développeur sans maitriser un seul langage de dev ? Alors pourquoi ne pas commencer par apprendre SQL ???

    A +

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

Discussions similaires

  1. Traduction d'une requête pgsql en Job Java
    Par Sophie_Géo dans le forum Développement de jobs
    Réponses: 1
    Dernier message: 17/11/2014, 11h26
  2. [Android] XE7 : se connecter à une base mySQL ou pgSQL distante
    Par Invité dans le forum Composants FMX
    Réponses: 9
    Dernier message: 17/09/2014, 22h13
  3. Réponses: 1
    Dernier message: 04/04/2014, 14h00
  4. Transfert de données entre mysql et pgsql
    Par Zerphe39 dans le forum Linux
    Réponses: 0
    Dernier message: 07/12/2012, 16h16
  5. Réponses: 2
    Dernier message: 04/11/2006, 00h33

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