Page 1 of 2

Acces Postgresql

Posted: 04 Jun 2026, 08:14
by Reefounet
Bonjour à tous,

Après avoir chargé les sources, compilé ... et essayé...impossible de me connecter à Postgresql.
J'ai donc fait des essais avec Zeoslib 8.
Cela fonctionne parfaitement.
J'ai ouvert le projet Gestinux.lpi sous Lazarus et j'ai vu que sur la fiche, il y avait le module TGDBconnection.
J'ai modifié les paramètres pour ma base de données, spécifié le protocol 'Postgresql' et coché la propriété Connected : Ok cela fonctionne.
C'est donc plus loin dans le programme qu'il faut trouver.
Oui, mais où ?

Cordialement
Benoît

Re: Acces Postgresql

Posted: 04 Jun 2026, 09:40
by tintinux
Il n'y a pas besoin de mettre quelquechose dans TGDatabase.LibraryLocation ?

Re: Acces Postgresql

Posted: 04 Jun 2026, 14:13
by Reefounet
tintinux wrote: 04 Jun 2026, 09:40 Il n'y a pas besoin de mettre quelquechose dans TGDatabase.LibraryLocation ?
Non, j'ai essayé (voir capture écran jointe) et tout fonctionne très bien.
Donc, il faudrait modifier cela dans les sources mais pour le moment je "nage" un peu avec le code et les différents caractéristiques de Lazarus.
A ce propos, existe-t-il un outils qui retrace le chemin effectué par les différents appels de procédures ?
En attendant, je continue l'exploration

Re: Acces Postgresql

Posted: 05 Jun 2026, 00:22
by Reefounet
tintinux wrote: 04 Jun 2026, 09:40 Il n'y a pas besoin de mettre quelquechose dans TGDatabase.LibraryLocation ?
J'ai fait un bout de code pour montrer tous les protocoles de zeos.
Je l'ai mis en fichier joint.
Cela permet de tester la connexion.
Donc, je confirme, rien de LibraryLocation.
Chez moi, connexion impeccable à Postgres.
Et vous ?

Re: Acces Postgresql

Posted: 05 Jun 2026, 14:37
by tintinux
Bonjour
Reefounet wrote:existe-t-il un outils qui retrace le chemin effectué par les différents appels de procédures ?
Le débogueur de Lazarus.

Sinon, essaie de te connecter sans spécifier la base de données, donc laissant vide TGDbConnection.Database.
Gestinux fait cela avant de se connecter à la bonne base (gdatabase.pas ligne 366) afin de permettre de lister les bases existantes, et de mieux diagnostiquer certains problèmes.
Avec MySql cela fonctionne bien et aussi avec PostgreSql dans le passé.
Peut-être est-ce problématique avec une version plus récente de PostgreSql...

Re: Acces Postgresql

Posted: 06 Jun 2026, 16:29
by Reefounet
Bonjour à tous,

Bon, après pas mal d'essais et de modifications, j'arrive à présenter dans le Combobox de connexion les différents protocoles et à me connecter.
Mais, comme c'est la première connexion, le message de création de Base de données apparaît.
Sauf qu'ayant dévié toute la connexion avec "DBMS", il trouve une erreur ! (voir fichier joint).
Cela fait une semaine que je fouille pour trouver où chercher ! J'avoue que je commence à m'épuiser car je voulais l'essayer et participer mais la je galère !
Pourquoi ne pas simplifier tout cela puisqu'avec le composant Zeos 8, le choix de protocole et la connexion y compris à postgresql fonctionne à merveille ?
Question : ne peut-on pas éviter tout le protocole de connexion à la base de données d'avant ?

Re: Acces Postgresql

Posted: 06 Jun 2026, 19:26
by tintinux
Ce n'est pas parce que ZeosLib se connecte à beaucoup de SGBD (ou protocoles) qu'on peut les utiliser tous de la même manière sans s'en préoccuper.
En particulier lors des définitions de structure, il y a des spécificités importantes de chaque SGBD, et même parfois de chaque version d'un SGBD.
On est malheureusement obligé de modifier un peu les instructions passées à chaque SGBD en fonction de ces spécificités.
Cela se fait dans des unités de gestinux_util pour mieux séparer le fonctionnel du middleware SGBD et la propriété Protocol est essentielle.
La simplification que tu évoques est à mon avis, hélas, impossible.

Gestinux jusqu'à sa version 1.4 a supporté PostgreSQL 9, mais c'était il y a 5 ou 6 ans, voire plus. Il est probable qu'il y a eu des ruptures de compatibilité depuis. On pourrait sans doute corriger, mais ce n'est certainement pas une tâche facile. En tous cas, elle ne me semble réalisable que par quelqu'un qui connait très bien PostgreSQL, Lazarus, ZeosLib et Gestinux. Si tu ne trouves même pas quelle est exactement l'erreur rencontrée et où, cela sera très difficile.

Guy Béart chantait : "Il faut mettre la charrue avant les bœufs, ça les encourage.". Mais il y a des limites...

Pour ma part, je ne maintiens plus depuis longtemps un serveur PostgreSQL, je n'ai plus assez de ressources et c'est trop de boulot à faire vivre et à tester.

Pour toi, la solution la plus simple pour éviter de t'arracher les cheveux, serait d'installer un serveur MariaDb, avec lequel on est sûr que Gestinux marche parfaitement.

Une autre solution temporaire pourrait être éventuellement d'essayer de créer la base manuellement à partir d'un script SQL compatible avec PostgreSQL.
Gestinux est a priori capable de générer ce script pour la version 9, à partir d'une base MySql et je peux t'envoyer un tel script.
Des adaptations seront peut-être nécessaires, je ne sais pas.
Après il restera à tester le fonctionnement du logiciel sous PostgreSQL 14.

Quand tu connaîtras mieux le fonctionnement, tu pourras revenir à l'adaptation de Gestinux à la dernière version de PostgreSQL.

.

Re: Acces Postgresql

Posted: 06 Jun 2026, 21:49
by Reefounet
tintinux wrote: 06 Jun 2026, 19:26 Une autre solution temporaire pourrait être éventuellement d'essayer de créer la base manuellement à partir d'un script SQL compatible avec PostgreSQL.
Gestinux est a priori capable de générer ce script pour la version 9, à partir d'une base MySql et je peux t'envoyer un tel script.
Des adaptations seront peut-être nécessaires, je ne sais pas.
Je suis preneur pour le script SQL. Je connais bien Postgresql que je pratique depuis dix ans. Je pourrais faire remonter les erreurs et cela me permettrait de teste Gestinux, car de mon côté, j'ai déjà tout une Gestion Co+Compta hébergées sous Postgresql. Donc installé MariaDb à côté, je verrai en dernier recours sur une autre machine.
De ce que j'ai lu, MariaDb et Postgresql respectent SQL. Il y a quelques différences de syntaxe mais cela doit être gérable.
Je croise donc les doigts pour que cela fonctionne sans trop de modif afin, enfin, de tester Gestinux.
En te remerciant du partage du script.

Re: Acces Postgresql

Posted: 07 Jun 2026, 00:35
by Reefounet
Je progresse !
J'ai eu l'idée de modifier les protocoles proposés dans GDbConnectionBase

Code: Select all

function DecodeProtocol(const aProtocol: TDBMSType): string;

begin
case aProtocol of
  Dbms_MySql: Result := 'MySql 5-8 & MariaDb 5-10';
  Dbms_PgSql: Result := 'PostgreSql';  
Du coup, j'ai pu me connecter à Postgresql !!!

J'ai même pu voir les base de données existantes avec mon User.
Par contre, lorsque je fait création d'une base de données => "ErrorCreatingDatabase"

J'ai donc créer une base de données vide 'Gestinux' => pas d'erreur de connexion !

Mais, alors qu'il essaie de créer les tables, un autre message apparaît voir ci-dessous.
Après vérification, il n'a pas créer la table Company. Il ne peut donc effectuer le Select en SQL.

J'abandonne pour ce soir.

Re: Acces Postgresql

Posted: 07 Jun 2026, 09:59
by Reefounet
Bonjour à tous,
Après une petite nuit, je reviens à nos problèmes.
Je résume :
en modifiant ligne 231 de GdbConnectionBase.pas

Code: Select all

Dbms_PgSql: Result := 'PostgreSql 9';
en

Code: Select all

Dbms_PgSql: Result := 'PostgreSql';
on se connecte à Postgresql >14 (je n'ai pas tester en dessous).
On obtient les BDD existantes sur le serveur.
Mais si on veut créer la BDD Gestinux, on obtient une erreur (voir message précédent).
Après recherche, l'erreur vient des guillemets en trop dans GdbConnection.pas ligne 400

Code: Select all

ExecSqlDataDefinition('CREATE DATABASE "' + aDatabaseName +
     '" WITH ENCODING=''UTF8'' CONNECTION LIMIT=-1', aDatabaseName, 'ErrorCreatingDatabase');
doit être

Code: Select all

ExecSqlDataDefinition('CREATE DATABASE ' + aDatabaseName +
      ' WITH ENCODING=''UTF8'' CONNECTION LIMIT=-1', aDatabaseName, 'ErrorCreatingDatabase');
En modifiant cela, le format de la commande SQL est ok.
Mais cela provoque une erreur dans Postgresql car cette commande ne peut pas être comprise dans une transaction.
voir documentation Postgresql https://docs.postgresql.fr/18/sql-createdatabase.html

error1.png
Du coup, j'ai cherché comment éviter la transaction mais je ne trouve pas où modifier dans le code.
Tintinux, une idée ?