Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
718 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  quelles sont les differences entre les requetes my/pgsql??

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

quelles sont les differences entre les requetes my/pgsql??

n°822157
atic
Posté le 13-08-2004 à 10:49:49  profilanswer
 

Bonjour a tous
Alors voila pour ceux qui ne me connaissent pas
Je suis toujours "le jeune stagiaire qui sait rien faire"
Aujourd'hui se pose a moi un probleme
Dans mon script j'avais des requetes mysql mais comme je me raccorde desormais a postgresql, j'aurais voulu savoir quelles sont les differences majeures entre ces 2 SGBD au niveau des requetes
Apparemment on ne peut pas toujours les transportées
Si vous connaissez des adresses de sites ou autre traitant de ce sujet...
Merci

mood
Publicité
Posté le 13-08-2004 à 10:49:49  profilanswer
 

n°822294
gizmo
Posté le 13-08-2004 à 13:25:24  profilanswer
 

genre j'ai pas cherché 5 minutes sous google...

n°822304
atic
Posté le 13-08-2004 à 13:35:20  profilanswer
 

salut gizmo  
la derniere fois OK j'ai fait le relou
Mais là sur google ya pas de truc ou je peux trouver les differences entre les 2
Moi c'est juste au niveau de l'écriture des requetes, parce que pour les fonctions ça va

n°822320
gizmo
Posté le 13-08-2004 à 13:45:45  profilanswer
 

Et pourtant, on trouve la doc des deux sgdb en 30 secondes. La conversion toute faite, tu ne trouveras pas. Soit les requètes sont triviales et sont dans 90% des cas identiques, soit elles sont complexe et alors il est quasiment impossible de fournir un guide de conversion.
 
T'as une requète qui te pète à la gueule? tu regardes se qui la compose dans la doc mysql et tu regardes tout ce qui existe en équivalent dans postgres. Ensuite, pour ce qui reste, soit tu trouves rapidement dans le reste de la doc postgres (elle est super claire et le moteur de recherche marche assez bien), soit tu viens ici avec un question claire.

n°822347
atic
Posté le 13-08-2004 à 14:03:15  profilanswer
 

Daccord
Mais voila le truc jai une requete qui passe pas et je trouve pas d'ou peut venir l'erreur
en fait c'est à ce niveau là que ça déconne
 
 /*
   * Prepare the SQL Query from the data definition file
   */
  $qparts['type']   = 'select';
  $qparts['select'] = $this->create_column_list();
  // Even if the key field isn't displayed, we still need its value
  if ($select_recs) {
   if (!in_array ($this->key, $this->fds)) {
    $qparts['select'] .= ','.$this->fqn($this->key);
   }
  }
  $qparts['from']  = $this->create_join_clause();
  $qparts['where'] = $this->make_where_from_query_opts();
  // build up the ORDER BY clause
  if (isset($this->sfn)) {
   // WTF $raw_sort_fields?
   //$raw_sort_fields = array();
   $sort_fields     = array();
   $sort_fields_w   = array();
   foreach ($this->sfn as $field) {
    if ($field[0] == '-') {
     $field = substr($field, 1);
     $desc  = true;
    } else {
     $field = $field;
     $desc  = false;
    }
    //$raw_sort_field = 'qf'.$field;
    $sort_field   = $this->fqn($field);
    $sort_field_w = $this->fdd[$field]['name'];
    $this->col_has_sql($field) && $sort_field_w .= ' (sql)';
    if ($desc) {
     $sort_field   .= ' DESC';
     $sort_field_w .= ' '.$this->labels['descending'];
    } else {
     $sort_field_w .= ' '.$this->labels['ascending'];
    }
    //$raw_sort_fields[] = $raw_sort_field;
    $sort_fields[]     = $sort_field;
    $sort_fields_w[]   = $sort_field_w;
   }
   if (count($sort_fields) > 0) {
    $qparts['orderby'] = join(',', $sort_fields);
   }
  }
  $to = $this->fm + $this->inc;
  if ($listall) {
   $qparts['limit'] = $this->fm.',-1';
  } else {
   $qparts['limit'] = $this->fm.','.$this->inc;
  }
 
ensuite j'ai une fonction qui fait la requete
 
unction query_make($parts) /* {{{ */
 {
  foreach ($parts as $k => $v) {
   $parts[$k] = trim($parts[$k]);
  }
  switch ($parts['type']) {
   case 'select':
    $ret  = 'SELECT ';
    if ($parts['DISTINCT'])
     $ret .= 'DISTINCT ';
    $ret .= $parts['select'];
    $ret .= ' FROM '.$parts['from'];
    if ($parts['where'] != '')
     $ret .= ' WHERE '.$parts['where'];
    if ($parts['groupby'] != '')
     $ret .= ' GROUP BY '.$parts['groupby'];
    if ($parts['having'] != '')
     $ret .= ' HAVING '.$parts['having'];
    if ($parts['orderby'] != '')
     $ret .= ' ORDER BY '.$parts['orderby'];
    if ($parts['limit'] != '')
     $ret .= ' LIMIT '.$parts['limit'];
    if ($parts['procedure'] != '')
     $ret .= ' PROCEDURE '.$parts['procedure'];
    break;
   case 'update':
    $ret  = 'UPDATE '.$parts['table'];
    $ret .= ' SET '.$parts['fields'];
    if ($parts['where'] != '')
     $ret .= ' WHERE '.$parts['where'];
    break;
   case 'insert':
    $ret  = 'INSERT INTO '.$parts['table'];
    $ret .= ' VALUES '.$parts['values'];
    break;
   case 'delete':
    $ret  = 'DELETE FROM '.$parts['table'];
    if ($parts['where'] != '')
     $ret .= ' WHERE '.$parts['where'];
    break;
   default:
    die('unknown query type');
    break;
  }
  return $ret;
 } /* }}} */
Et j'ai ds messages d'erreur: invalid sql query quand j'utilise mon programme

n°822407
atic
Posté le 13-08-2004 à 14:41:10  profilanswer
 

en fait jsuis pas clair
Alors tout d'abord j'ai mon phpmyeditSetup qui me genere des scripts pour chacune des tables de ma base
Pour ce Setup j'ai choisi d'utiliser la couche d'abstraction ADo c'est plus interessant jai donc remplacé les fonctions mysql par des fonctions ADo
donc mon Setup me genere des scripts mais le probleme c'est que je dois utiliser le phpmyedit.class.php pour l'affichage de mes tables
Et c'est la qu'est le probleme
Dans le .class j'ai remplacé les fonctions mysql par des pgsql et maintenant j'ai des erreurs "invalid sql query"
voila toute mon histoire

n°823089
gizmo
Posté le 14-08-2004 à 11:25:58  profilanswer
 

Tout ce que tu me dis ne me sert absolument à rien! Si tu ne précise pas la query qui merde, c'est impossible à deviner.

n°823967
atic
Posté le 16-08-2004 à 09:21:01  profilanswer
 

Voila la requete a probleme
En gros ma base gere un parc informatique et les tables correspondent aux differents materiels
SELECT PMEtable0.IDStation AS qf0,PMEtable0.IDImplantation AS qf1,PMEtable0.IDUtilisateur AS qf2,PMEtable0.N_Interne AS qf3,PMEtable0.N_Serie AS qf4,PMEtable0.IDType_station AS qf5,PMEtable0.IDMarque_station AS qf6,PMEtable0.IDModele_station AS qf7,PMEtable0.IDFournisseur AS qf8,PMEtable0.Date_Achat AS qf9,PMEtable0.Cout AS qf10,PMEtable0.N_Immobilisation AS qf11,PMEtable0.Duree_Garantie AS qf12,PMEtable0.N_Garantie AS qf13,PMEtable0.Contrat_Maintenance AS qf14,PMEtable0.IDConfiguration AS qf15,PMEtable0.Memoire AS qf16,PMEtable0.IDType_Disque_Dur AS qf17,PMEtable0.Date_affectation AS qf18,PMEtable0.fd_Position AS qf19,PMEtable0.Observations AS qf20,PMEtable0.etat AS qf21,PMEtable0.ordre AS qf22 FROM station AS PMEtable0 ORDER BY PMEtable0.IDStation LIMIT 0,15741.26 miliseconds  

n°824191
gizmo
Posté le 16-08-2004 à 13:54:43  profilanswer
 

- C'est quoi ces paramètres loufoques pour LIMIT?
- Quel est le message d'erreur renvoyé?

n°824224
atic
Posté le 16-08-2004 à 14:24:58  profilanswer
 

j'ai cette erreur
ERROR: LIMIT #,# syntax is not supported  
-----------------------------------------------------------
 
phpPGEdit error: invaid SQL query
suivi de la requete que j'ai écrite avant

mood
Publicité
Posté le 16-08-2004 à 14:24:58  profilanswer
 

n°824225
atic
Posté le 16-08-2004 à 14:25:40  profilanswer
 

et pour les parametres de limit je vois vraiment pas ce que ça peut etre, je vais chercher

n°824239
gizmo
Posté le 16-08-2004 à 14:40:36  profilanswer
 

Limit, en pg tout comme en mysql support le format suivant:
 
LIMIT nb_de_row OFFSET décalage  
 
Donc il te suffit d'adatper ta requète en conséquence.


Message édité par gizmo le 16-08-2004 à 14:40:49
n°824244
atic
Posté le 16-08-2004 à 14:43:11  profilanswer
 

oui oui je viens de men rendre compte
mais c'est une autre erreur que j'ai maintenant
 
ERROR: column pmetable0.idstation does not exist  
ça veut dire que ça ne retrouve pas ma table??

n°824287
gizmo
Posté le 16-08-2004 à 15:18:50  profilanswer
 

non, ca veut dire qu'il ne trouve pas la colonne. S'il ne trouvaient pas la table tu aurais eu une autre erreur.

n°824289
atic
Posté le 16-08-2004 à 15:23:17  profilanswer
 

ah oui c'est vrai  
là c'est chaud parce ke la colonne existe bien et sous mysql ça marche
ça doit etre un probleme de syntaxe diferente dun SGBDR a lautre

n°824294
atic
Posté le 16-08-2004 à 15:42:41  profilanswer
 

ok mec c'est cool de donner un coup de main, par contre se foutre de la gueule de débutants dans d'autres posts c'est moyen
M'enfin c'est pas trop grave jsuis pas trop susceptible

n°824312
gizmo
Posté le 16-08-2004 à 16:18:57  profilanswer
 

bah y a débutant et débutant. Entre un message d'erreur du style "Stack overflow at address AC340F:C435FD" et un bête "column xxx does not exist", tu trouves pas que l'un des deux est *un peu* plus facile à comprendre?

n°824319
atic
Posté le 16-08-2004 à 16:27:42  profilanswer
 

là n'est pas le probleme
Se moquer n'a jamais pu aider personne
Moi je suis nul et je le sais, mais php j'en ai jamais fait et on m'a jeté dans un stage sans tuteur  
Donc la seule maniere que j'ai pour progresser c'est de poser des questions "betes"
Encore que là c'est vraiment betes parce que je pensais à un champs quand jai di table
M'enfin c'est de l'humour potache  
Bref ya pas de souci
par contre si tu pouvais me dire pkoi avec mysql ya pas de prob et avec postgresql jai cette erreur
Là ce serait cool

n°824326
gizmo
Posté le 16-08-2004 à 16:31:54  profilanswer
 

t'as un acces à psql (l'outil ligne de commande)?
dans ce cas, tu tapes dedans  
 
\d station
 
tu auras la liste des colonnes de la table. Si elle n'y est pas c'est que l'export des données a merdé quelque part.
 
sinon, tu dois pouvoir voir la structure de la table avec phppgadmin également.

n°824332
atic
Posté le 16-08-2004 à 16:36:48  profilanswer
 

ya pas de prob au niveau de la table le champs id station est bien present
jvois ça avec dbtools
pas de prob de ce coté là
moi jpencherai plutot pour un pb syntaxique
mais vraiment jvois pas lequel

n°824355
gizmo
Posté le 16-08-2004 à 16:49:54  profilanswer
 

c'est IDStation ou "id station" ton champs?

n°824357
atic
Posté le 16-08-2004 à 16:52:15  profilanswer
 

voila c'est à ça que je pensais mon champs se nomme exactement IDStation

n°824359
atic
Posté le 16-08-2004 à 16:52:46  profilanswer
 

sur la requete c'est bien ce qui est marqué pourtant

n°824364
gizmo
Posté le 16-08-2004 à 17:00:58  profilanswer
 

Et quand tu fais un bête SELECT * FROM station LIMIT 1 ca te renvoie quoi?

n°824398
souk
Tourist
Posté le 16-08-2004 à 17:50:21  profilanswer
 

avec postgres, il ne faut pas de mot cle AS pour donner un alias a une table, ca doit venir de la nan ?
 
=> select alias.blabla from maTable alias

n°824731
gizmo
Posté le 17-08-2004 à 09:19:48  profilanswer
 

souk a écrit :

avec postgres, il ne faut pas de mot cle AS pour donner un alias a une table, ca doit venir de la nan ?
 
=> select alias.blabla from maTable alias


ce n'est pas obligatoire mais rien n'empèche de le mettre. C'est même recommandé.

n°824739
atic
Posté le 17-08-2004 à 09:31:44  profilanswer
 

<?php
$dbl  = @pg_connect("host=localhost dbname=spidi user=root
password=" );
if (!$dbl)  {
echo "c'est le BMC";
}
else
{
echo "Gagné";
}
$query="SELECT * FROM station";
$query = pg_query($query);
while($row = pg_fetch_array($query,NULL,PGSQL_ASSOC))
{
    echo "Name: ".$row['IDStation']."<br />";
}
 
?>
Ce code marche tres bien et me renvoie tout les identifiants de station
donc ma table et mes champs sont bien
Je regarde maintenant si ça a quelquechose a voir avec le AS

n°824759
atic
Posté le 17-08-2004 à 09:57:23  profilanswer
 

alors pour cette requete
SELECT PMEtable0.IDStation AS qf0,PMEtable0.IDImplantation AS qf1,PMEtable0.IDUtilisateur AS qf2,PMEtable0.N_Interne AS qf3,PMEtable0.N_Serie AS qf4,PMEtable0.IDType_station AS qf5,PMEtable0.IDMarque_station AS qf6,PMEtable0.IDModele_station AS qf7,PMEtable0.IDFournisseur AS qf8,PMEtable0.Date_Achat AS qf9,PMEtable0.Cout AS qf10,PMEtable0.N_Immobilisation AS qf11,PMEtable0.Duree_Garantie AS qf12,PMEtable0.N_Garantie AS qf13,PMEtable0.Contrat_Maintenance AS qf14,PMEtable0.IDConfiguration AS qf15,PMEtable0.Memoire AS qf16,PMEtable0.IDType_Disque_Dur AS qf17,PMEtable0.Date_affectation AS qf18,PMEtable0.fd_Position AS qf19,PMEtable0.Observations AS qf20,PMEtable0.etat AS qf21,PMEtable0.ordre AS qf22 FROM station PMEtable0 ORDER BY PMEtable0.IDStation LIMIT 015123.712 miliseconds  
 
jai cette erreur
ERROR: column pmetable0.idstation does not exist  
pourttant jai enlevé le AS dans le FROM

n°824772
gizmo
Posté le 17-08-2004 à 10:03:20  profilanswer
 

tu peux faire un dump de la structure de la table et le poster ici?

n°824775
atic
Posté le 17-08-2004 à 10:05:44  profilanswer
 

voila comment et créée ma table  
je sais pas si c'est ça que tu veux?
CREATE TABLE "public"."station"  
(
 "IDStation" int8 NOT NULL ,  
 "IDImplantation" int8 NOT NULL  DEFAULT 0,  
 "IDUtilisateur" int8 NOT NULL  DEFAULT 0,  
 "N_Interne" varchar(50),  
 "N_Serie" varchar(50),  
 "IDType_station" int8 DEFAULT 0,  
 "IDMarque_station" int8 DEFAULT 0,  
 "IDModele_station" int8 DEFAULT 0,  
 "IDFournisseur" int8 DEFAULT 0,  
 "Date_Achat" bool,  
 "Cout" NUMERIC(20,4),  
 "N_Immobilisation" varchar(50),  
 "Duree_Garantie" NUMERIC(20,4),  
 "N_Garantie" varchar(50),  
 "Contrat_Maintenance" varchar(50),  
 "IDConfiguration" int8 DEFAULT 0,  
 "Memoire" int8,  
 "IDType_Disque_Dur" int8 DEFAULT 0,  
 "Date_affectation" bool,  
 "fd_Position" varchar(50) DEFAULT ''A renseigner'::character varying',  
 "Observations" text,  
 "etat" varchar(20) DEFAULT ''station'::character varying',  
 "ordre" INTEGER DEFAULT 1,  
 PRIMARY KEY ("IDStation" )
)

n°824791
gizmo
Posté le 17-08-2004 à 10:17:56  profilanswer
 

ah! évidemment, c'est clair maintenant. tu as mis des guillemets. Cela veut dire que tu oblige le champs à avoir la casse indiquée. Or, dans ton select, tu ne mets pas les guillemets, donc les champs sont automatiquement transformées en minuscule, et il ne les retrouve plus.

n°824796
atic
Posté le 17-08-2004 à 10:22:52  profilanswer
 

alors la kestion a 2 balles (pour changer) faut il enlever les guillemets dans le create ou les ajouter ds le select
kess ki est le plus propre

n°824799
gizmo
Posté le 17-08-2004 à 10:26:26  profilanswer
 

perso, je les enlèverais du create, c'est plus propre et plus universel.

n°824925
atic
Posté le 17-08-2004 à 11:59:33  profilanswer
 

waouh les problemes qui nen finissent pas
Impossible d'enlever les guillemets du create étan donné que c'est fait sous dbtools et que c'est la traduction sql bete et mechante
donc rien a faire a ce niveau là maintenant je vais ramer pour trouver ou faire les modifs dans mon .class afin que toutes les requetes soient faites de la bonne maniere
En tout cas MERCI beaucoup gizmo de mavoir consacré du temps
C'est cool

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  quelles sont les differences entre les requetes my/pgsql??

 

Sujets relatifs
[MySQL] gros probleme de requêtesrequêtes CGI
Pb de requetes php/mysql et classementrequetes équivalentes
requetes imbriquées en SQL avec mysqlInterdire des requêtes dans un input...[RESOLU]
pb de requetes prenant du tempsProblème de requetes SQL
JAVA : Erreur avec 2 requêtes imbriquées :'-|fonction pr lister les tables dune base pgsql ??
Plus de sujets relatifs à : quelles sont les differences entre les requetes my/pgsql??


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR