dolibarr-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Dolibarr-dev] Dolibarr 2.9 et PostgreSQL


From: Antoine Delvaux
Subject: [Dolibarr-dev] Dolibarr 2.9 et PostgreSQL
Date: Tue, 22 Feb 2011 11:51:35 +0000

Bonjour à tous,

J'ai migré un Dolibarr 2.9 depuis MySQL vers PostgreSQL.  J'ai du un peu 
adapter le dump de mysqldump pour que l'import puisse se faire, mais 
globalement la migration a été possible.

J'ai ensuite rencontré un petit problème d'incompatibilité avec la clause 
"LIMIT $offset,$limit" qui doit être "LIMIT $limit OFFSET $offset" sous 
Postgres.  J'ai pu corriger cela dans la couche d'abstraction Postgres.  J'ai 
posté mon patch à http://savannah.nongnu.org/bugs/?32541

Mais je rencontre à présent un problème lors de l'encodage d'un paiement sur 
une facture :

Url sollicitée: /crm/fourn/facture/paiement.php?facid=209&action=create
Referer: https://eshango.com/crm/fourn/facture/fiche.php?facid=209
Gestionnaire de menu: eldy_backoffice.php/eldy_backoffice.php

Type gestionnaire de base de données: pgsql
Requête dernier accès en base en erreur: SELECT f.rowid as facid,f.rowid as 
ref,f.facnumber,f.total_ttc, f.datef as df, sum(pf.amount) as am FROM 
llx_facture_fourn as f LEFT JOIN llx_paiementfourn_facturefourn as pf ON 
pf.fk_facturefourn = f.rowid WHERE f.fk_soc = 178 AND f.paye = 0 AND 
f.fk_statut = 1 GROUP BY f.facnumber
Code retour dernier accès en base en erreur: DB_ERROR_42803
Information sur le dernier accès en base en erreur: ERROR: 42803: column 
"f.rowid" must appear in the GROUP BY clause or be used in an aggregate 
function LINE 1: SELECT f.rowid as facid,f.rowid as 
ref,f.facnumber,f.total_t... ^ LOCATION: check_ungrouped_columns_walker, 
parse_agg.c:543

La syntaxe de la clause GROUP BY est différente sous MySQL et PGSQL.  De ce que 
je comprends, PGSQL respecte le standard SQL alors, que MySQL utilise un 
raccourci qui lui est propre.  A 
http://dev.mysql.com/doc/refman/5.1/en/select.html on lit :

> MySQL extends the use of GROUP BY to permit selecting fields that are not 
> mentioned in the GROUP BY clause.

Pour avoir la requête correcte en Postgres, je suis obligé de modifier la 
requête précédente en :

SELECT f.rowid as facid,f.rowid as ref,f.facnumber,f.total_ttc, f.datef as df, 
sum(pf.amount) as am FROM llx_facture_fourn as f LEFT JOIN 
llx_paiementfourn_facturefourn as pf ON pf.fk_facturefourn = f.rowid WHERE 
f.fk_soc = 178 AND f.paye = 0 AND f.fk_statut = 1 GROUP BY f.rowid, 
f.facnumber, f.total_ttc, f.datef;

Le résultat de cette requête est bien le même sous PGSQL et MySQL, c'est déjà 
pas mal, mais cela veut-il dire que toutes les requêtes utilisant la clause 
GROUP BY doivent être corrigées dans Dolibarr ?  Est-ce que la v3.0 apporte 
déjà des corrections de ce côté ?

Voulez-vous que j'introduise un bug report dans Savannah pour ceci ?

Bonne journée,

--
Antoine Delvaux                          http://antoine.delvaux.net
Cassiopea  asbl                            http://www.cassiopea.org
PGP fingerprint: DC65 0D8B 6938 9229 33C3  18CA 4EB6 09D3 A333 3378







reply via email to

[Prev in Thread] Current Thread [Next in Thread]