Bonjour
Voici le script SQL généré par Gestinux de l'export d'une base vide pour PostgreSQL 9.
Je ne sais pas s'il fonctionne sur une version plus récente de ce SGBD : si des corrections sont effectuées, merci de renvoyer les erreurs et le script corrigé, pour mise à jour.
Je ne comprends pas ta modification de la fonction DecodeProtocol. Elle retourne a priori seulement un libellé pour affichage. Le 9 indique que seule cette version a été testée. On mettra 14 quand cela marchera bien avec cette version. Si on le supprime, on perd juste l'information, mais je ne vois pas ce que ça change, ou alors c'est qu'elle est appelée à tort quelque part.
La modification de la création de la base est un exemple des différences entre SGBD et des évolutions qui cassent la compatibilité. Cela n'était pas nécessaire en V9. Il faut modifier en conséquence et y a probablement des problèmes similaires dans la suite.
Pour la nécessité de créer une base en dehors d'une transaction, je regarderai plus tard.
Acces Postgresql
Re: Acces Postgresql
- Attachments
-
- Reefounet.sql
- (771.34 KiB) Downloaded 8 times
Cordialement,
Tintinux
Tintinux
Re: Acces Postgresql
J'ai trouvé et corrigé une erreur dans GDbConnectionBase.EncodeProtocol et GDbConnectionBase.EncodeProtocolFromZeos qui expliquerait assez bien ton problème initial rencontré avec PostgreSQL (que tu as contourné en modifiant DecodeProtocol). Il faut abandonner cette modification et mettre à jour les sources.
Merci de dire si cela permet d'aller plus loin.
Merci de dire si cela permet d'aller plus loin.
Cordialement,
Tintinux
Tintinux
Re: Acces Postgresql
Peut-être avec un commit après le SELECT qui précède la création !Reefounet wrote:Du coup, j'ai cherché comment éviter la transaction mais je ne trouve pas où modifier dans le code.
Tintinux, une idée ?
Eventuellement à répéter plus loin si nécessaire...
Code: Select all
procedure TGDbConnection.CreateDatabase_PgSql(const aDatabaseName: string);
var
OldTransactIsolationLevel: TZTransactIsolationLevel;
begin
try
OldTransactIsolationLevel := TransactIsolationLevel;
TransactIsolationLevel := tiNone;
// create database, connected to server
If InTransaction then
Commit;
ExecSqlDataDefinition('CREATE DATABASE ' + aDatabaseName +
' WITH ENCODING=''UTF8'' CONNECTION LIMIT=-1', aDatabaseName, 'ErrorCreatingDatabase');
// must connect to the created database, not to the server
Connected := False;
Database := aDatabaseName;
Connected := True;
// create language if not existing
if not ExistingQuery('SELECT 1 FROM pg_language WHERE lanname = ' +
StringSql('plpgsql')) then
ExecSqlRaise(SqlCreateLanguage_PgSql);
// create a function to Update field UpdateDate
ExecSqlDataDefinition(SqlCreateFunction_Upd_row_PgSql, 'upd_row',
'ErrorCreatingFunction');
finally
TransactIsolationLevel := OldTransactIsolationLevel;
end;
end;Cordialement,
Tintinux
Tintinux
Re: Acces Postgresql
Nickel, on va plus loin. On passe la connexion au serveur et on obtient la liste des BDD.tintinux wrote: 07 Jun 2026, 11:58 J'ai trouvé et corrigé une erreur dans GDbConnectionBase.EncodeProtocol et GDbConnectionBase.EncodeProtocolFromZeos qui expliquerait assez bien ton problème initial rencontré avec PostgreSQL (que tu as contourné en modifiant DecodeProtocol). Il faut abandonner cette modification et mettre à jour les sources.
Merci de dire si cela permet d'aller plus loin.
Par contre même erreur pour la création de la nouvelle BDD (J'ai vu que tu avais enlevé les guillemets). Je pense que l'erreur vient du fait qu'on ne peut pas effectuer "Create Database" dans un query standard car dans ce cas, il est considéré comme une transaction depuis Postgresql version 11. Il faut donc passer par le langage Psql. Il faut donc adapter la création de database pour Postgresql avec le langage Psql.
(Pour le script SQL, je regarde cela ce soir)
Cordialement
Reefounet
Reefounet
Re: Acces Postgresql
Peut être un début de réponse :
https://stackoverflow.com/questions/183 ... postgresql
https://stackoverflow.com/questions/183 ... postgresql
Cordialement
Reefounet
Reefounet