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 mailing list [email protected] http://lists.nongnu.org/mailman/listinfo/dolibarr-dev
