[Top][All Lists]
[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
- [Dolibarr-dev] Dolibarr 2.9 et PostgreSQL,
Antoine Delvaux <=