Open remymoine opened 5 years ago
Une possibilité valable semble être de créer une fonction unique qui ouvre, extrait puis ferme l'accès à la bdd.
A voir, perso je n'ai pas réussi à mettre en place ce fonctionnement, qui fermait la connection avant que les données soient récupérées dans un objet sur R. A retester, je tâche de m'y remettre en mars ;)
La possibilité que tu proposes implique que chaque fonction établisse et ferme une nouvelle connection.
Un exemple de fonction pour établir une connection :
connect2mabase <- function() { print("Merci de saisir le mot de passe pour vous connecter à la base :") pass<<-scan (what="character",nmax=1) connect_test <- try(dbConnect(dbDriver("PostgreSQL"), dbname = "mabase",host = "myhost", port = 5432,user = "myuser", password = pass), silent=T) if(is(connect_test,"try-error")) {print("La connexion à la a échoué")} else {con <<- dbConnect(dbDriver("PostgreSQL"), dbname = "mabase",host = "myhost", port = 5432,user = "myuser", password = pass) print("La connexion à PostgreSQL a bien été configurée")} }
Si on fait une connection pour chaque fonction, ca implique d'avoir une fonction "geonature.setup" dans laquelle on crée un objet avec les éléments de connection, qui est appelé par toutes les autres fonctions pour établir la connection.
J'ai trouvé ce qui m'embêtait (solution ultra bête). Je fais une fonction pour configurer la connexion et je teste tout ça dans le weekend, je ferai une PR ici :)
Nickel pour la connexion ! Quelques modifications apportées pour complément mais ça tourne très bien avec notre BDD aussi. Top !
Visiblement, il va falloir revoir un tout petit peu notre copie...
Après tests ce soir, pas moyen, quand on crée un objet setupDB et qu'on déconnecte, j'ai l'impression que l'objet en lui même expire (l'objet "est" la connexion). Ca marchait dans les premiers tests, car on ne refermait pas la connexion après avoir testé gn.setup :)
Du coup je pense qu'il faut, sur le même principe, créer un objet de type liste qui stocke toutes les infos de connexion, et on lance un dbConnect au début de chaque commande en allant chercher les infos dans cette liste.... Tout petit changement donc, c'est chaque fonction qui va se créer son propre objet setupDB.
Dernier post: https://stackoverflow.com/questions/33098894/rpostgresql-cannot-close-connections