Compiler pgModeler, puissant logiciel de modélisation de données pour PostgreSQL

pgmodeler_logo

À la recherche d’un logiciel pour modéliser adéquatement une base de données PostgreSQL, je suis tombé sur pgModeler. Interface épurée et très esthétique, gestion de tous les types de pgSQL, possibilité d’exporter en PNG, possibilité de synchroniser directement une base de données, bref, un véritable charme. À la base, je désirais un logiciel respectant les standards UML. Au final, ça ajoutait simplement une difficulté : passer de l’UML à PostgreSQL (bon, il existe sans doute des logiciels qui permettent d’harmoniser tout ça, mais les interfaces des quelques-uns que j’ai essayés m’ont rapidement découragé). Décision finale : pgModeler.

ex

Petit bémol : bien que pgModeler soit OpenSource, il faut payer pour télécharger les binaires officiels pour Windows (seulement 10$). Si on préfère ne pas payer, il faut compiler à partir des sources (c’est ce que j’ai fait).

Compiler pgModeler à partir des sources (pour Windows)

Le site officiel fournit des directives pour compiler à partir des sources. J’ai toutefois rencontré quelques difficultés qui m’ont compliqué la vie (et fait regretter de ne pas avoir déboursé, à tel point que j’ai cru que la complexité de la compilation était peut-être voulue, mais je ne veux accuser personne). Voici donc la procédure qui m’a permis de parvenir à des binaires utilisables.

Même si votre architecture est en 64 bits, vous devez télécharger les version 32 bits de tous les logiciels ci-dessous. Si vous avez déjà les versions 64 bits, je vous suggère de compiler sur un ordinateur qui n’a pas ces logiciels et de les installer à nouveau (autrement vous pouvez avoir des doubles installations, mais vous risquez d’avoir de la difficulté à gérer la variable d’environnement PATH.

Télécharger et installer les dépendances

  1. Télécharger les sources de pgModeler depuis http://www.pgmodeler.com.br/download. J’ai choisi la version 0.8.2 en .tar.gz (vous pouvez cloner le dépôt git comme suggéré).
  2. Extraire l’archive vers un dossier sans accent, sans espace, sans caractères spéciaux… (ça fait planter la compilation ou demande d’éditer les sources). Pour vous faciliter la vie, je vous suggère de tout placer dans C:\pgmodeler
  3. Télécharger et installer la librairie Qt si vous ne l’avez pas déjà (pgModeler recommande la version 5.6.x, j’utilise ici la 5.6.2) : https://www.qt.io/download-open-source/#section-2 (Offline Installers, Qt 5.6.2 for Windows 32-bit (MinGW 4.9.2, 1.0 GB)). Vous devez absolument prendre la version pour MinGW et non celle pour VS (sinon, ça ne fonctionnera pas, j’avais fait l’erreur et l’ai résolu à partir de ce post). Ça devrait fonctionner avec les versions plus récentes de Qt selon pgModeler, même si ce n’est pas recommandé. J’ai laissé le dossier d’installation par défaut (C:\Qt\Qt5.6.2).
  4. Vous devez avoir une version de PostgreSQL installée sur l’ordinateur sur lequel vous compilez, car pgModeler utilise certains fichiers d’en-tête de PostgreSQL. Pour ma part, j’ai installé la version 9.6.1 pour l’architecture x86-32 via https://www.enterprisedb.com/downloads/postgres-postgresql-downloads. Comme j’écris cet article un peu après être passé à travers tout un tas de problème en installant pgModeler, ma mémoire me fait un peu défaut, mais je crois avoir eu une erreur de compilation en raison du fait que PostgreSQL était situé à l’intérieur du dossier « Program Files » (qui contient un espace). Pour cette installation, je vais donc installer PostgreSQL dans C:\pgsql (vous pouvez en faire une installation temporaire quitte à le désinstaller tout de suite après).
  5. Télécharger et installer le client Git via https://git-scm.com/download/win, car il contient le package MSYS2. La page de téléchargement m’a fait télécharger automatiquement la version 64 bits, mais ce n’est pas ce dont vous avez besoin. Il faut choisir le lien vers la version 32 bits.. Choisissez la version 32-bit Git for Windows Setup. Assurez-vous de choisir l’option « Use Git and optional Unix tools from the Windows Command Prompt » afin que les commandes Git et Unix soient ajoutées à votre variable d’environnement PATH. Vous pouvez laisser le dossier d’installation de Git par défaut (C:\Program Files (x86)\Git).

La librairie XML2 est nécessaire mais vient avec PostgreSQL, donc normalement vous n’avez rien à installer. Même chose pour le compilateur GCC et MinGW qui viennent avec Qt (si vous avez pris la version qui l’incluait, ce qui est impératif).

Éditer le fichier pgmodeler.pri

Tel que décrit dans la procédure officielle, il faut apporter quelques modifications au fichier C:\pgmodeler\pgmodeler.pri. Pour ma part, les lignes à modifier sont de 155 à 165. Vous devez faire en sorte que chacun des chemins indiqués soit valide (dépendamment de votre installation de pgsql, que je vous ai recommandé de faire dans C:\pgsql).

windows {
  !defined(PGSQL_LIB, var): PGSQL_LIB = C:/pgsql/lib/libpq.dll
  !defined(PGSQL_INC, var): PGSQL_INC = C:/pgsql/include
  !defined(XML_INC, var): XML_INC = C:/pgsql/include
  !defined(XML_LIB, var): XML_LIB = C:/pgsql/bin/libxml2.dll

  # Workaround to solve bug of timespec struct on MingW + PostgreSQL < 9.4
  QMAKE_CXXFLAGS+="-DHAVE_STRUCT_TIMESPEC"

  INCLUDEPATH += "$$PGSQL_INC" "$$XML_INC"
}

Compilation

Avant tout, pour vous éviter bien des embûches, ajouter à la variable PATH (voir comment faire) les deux chemins dossiers suivants :

  • C:\Qt\Qt5.6.2\Tools\QtCreator\bin (peut-être à adapter, le dossier doit contenir Qt5Core.dll)
  • C:\pgsql\bin (même chose, celui-ci doit contenir libxml2.dll et libpq.dll)
  • C:\Qt\Qt5.6.2\Tools\mingw492_32\bin

À partir d'une console Windows, rendez-vous dans le dossier de pgmodeler.

cd C:\pgmodeler

Comme vous n'avez probablement pas ajouté les binaires de Qt à votre variable d'environnement PATH, il faudra taper le chemin complet à chaque fois. Voici les commandes que j'ai utilisées (attention aux noms des dossiers, on peut confondre mingw49 et ming492 facilement) :

C:\Qt\Qt5.6.2\5.6\mingw49_32\bin\qmake.exe pgmodeler.pro
C:\Qt\Qt5.6.2\Tools\mingw492_32\bin\mingw32-make.exe
C:\Qt\Qt5.6.2\Tools\mingw492_32\bin\mingw32-make.exe install
cd build
C:\Qt\Qt5.6.2\5.6\mingw49_32\bin\windeployqt.exe pgmodeler.exe

Si tout s'est bien déroulé, vous trouverez dans le dossier C:\pgmodeler\bin les exécutables de pgModeler. Pour ma part, j'étais toujours incapable de lancer pgmodeler.exe en raison de problèmes de linkage. La solution a été d'écraser les DLL problématiques du dossier build/ et de les remplacer par celles qui venaient dans l'archive de pgmodeler ou du dossier bin/ de Qt. Voici les DLL que j'ai ainsi remplacés :

  • Qt5Core.dll
  • Qt5PrintSupport.dll
  • objrenderer.dll (via C:/pgmodeler/libobjrenderer)
  • parsers.dll (via C:/pgmodeler/libparser)
  • pgconnector.dll (via C:/pgmodeler/libpgconnector)
  • pgmodeler.dll (via C:/pgmodeler/libpgmodeler)
  • pgmodeler_ui.dll (via C:/pgmodeler/libpgmodeler_ui)
  • utils.dll (via C:/pgmodeler/libutils)

Ça m'a pris quelques tentatives afin de trouver cette astuce, je crois que c'est un bug dans le script de compilation, mais je n'ai pas investigué davantage. J'ai trouvé la solution via ce post sur Github.

J'espère sincèrement que ça se passera bien pour vous, car au final, le logiciel en vaut vraiment la peine !