dolibarr-dev
[Top][All Lists]
Advanced

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

Re: [Dolibarr-dev] Support Postgres


From: Eldy
Subject: Re: [Dolibarr-dev] Support Postgres
Date: Tue, 01 Mar 2005 21:41:06 +0100
User-agent: Mozilla Thunderbird 1.0 (Windows/20041206)

Francois Tigeot wrote:

On Mon, Feb 28, 2005 at 05:11:27PM +0100, Eldy wrote:
Etant donné que les fichiers sql du répertoire pgsl/tables ne sont pas à jour et que maintenir 2 versions (mysql et pgsql) est par expérience une mauvaise solution (oubli, décalage, ...), j'ai inclus dans le répertoire build un nouveau script appelé dolibarr_mysql2pgsl. Il ne prend pas d'arguments, il se lance simplement et va automatiquement générer les sql de création des tables pour pgsql à partir de ceux existant pour mysql (conversion de syntaxe).

Je l'ai appliqué une première fois, ce qui a eu pour effet de mettre à niveau tous les sql de pgsql que j'ai commités. Le résultat m'a l'air syntaxiquement pas mal pour un premier coup. J'attends cependant des retours de vrais utilisateurs pgsql pour me signaler les sql qui ne passerait pas afin que j'améliore l'outil.

Bon, j'ai modifié les Makefiles, et j'ai pu tester les fichiers *.sql

Postgres me retourne énormèment d'erreurs sur des types de données non
standards. Par exemple :

        psql -U pgsql -h wapiti dolibarr < llx_c_actioncomm.sql
        ERROR:  type "tinyint" does not exist
Ce problème est mineur. J'ai tout simplement oublié le type tinyint.
J'ai corrigé le script de portage pour transformer les "tinyint" mysql en "smallint" pgsql.

Ou bien:

        psql -U pgsql -h wapiti dolibarr < llx_bank_account.sql
        NOTICE:  CREATE TABLE will create implicit sequence
        "llx_bank_account_rowid_seq" for "serial" column 
"llx_bank_account.rowid"
        ERROR:  type "datetime" does not exist
La, j'ai oublié de convertir le type datetime.
J'ai corrigé le script de portage pour transformer les "datetime" mysql en "timestamp" pgsql.


Bref, le code généré automatiquement n'a pas l'air génial.

Il y a surement d'autres types oubliés. Mais petit a petit quand il seront tous intégrés, tout ira tout seul

Mais surtout, ce qui me gêne le plus en regardant les différences par
rapport aux fichiers .sql précédents dans le CVS, c'est que plein de
choses qui avaient manifestements été pensées par un humain ont été remplacées
par des types de données plus ou moins équivalents qui risquent de poser
des problèmes subtils.

Si je prends un exemple, dans llx_c_actioncomm.sql, un SERIAL a ainsi été
remplacé par un INTEGER.
Ca fonctionne presque de la même façon, mais la séquence normalement associée
au SERIAL ne sera pas mise à jour, ce qui fait qu'au prochain insert dans la
table, un élément n'aura pas la bonne valeur...

Si le type SERIAL n'a pas été généré dans le fichier pgsql, c'est parceque le fichier source ne contenait pas le type "autoincrement" (l'équivalent mysql). Le fichier source mysql ne comprenant pas de séquence associée, le fichier pgsql n'a aucune raison d'en avoir une. Ici, c'est donc le script qui avait été fait en manuel qui était dans l'erreur.

A retester donc avec les corrections que j'ai apporté sur le type tinyint et datetime. L'idéal serait que je teste moi même pour avoir un script ok du premier coup mais faut que je prenne le temps d'installer postgres, et je suis fainiard...

--
Laurent Destailleur.
---------------------------------------------------------------
EMail: address@hidden
AWStats : http://awstats.sourceforge.net
AWBot : http://awbot.sourceforge.net
CVSChangeLogBuilder : http://cvschangelogb.sourceforge.net






reply via email to

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