PnX-SI / GeoNature-R-package

Package R pour la synthèse des données GeoNature
GNU General Public License v3.0
1 stars 1 forks source link

Fermeture connection SQL #1

Open remymoine opened 5 years ago

remymoine commented 5 years ago

Dernier post: https://stackoverflow.com/questions/33098894/rpostgresql-cannot-close-connections

remymoine commented 5 years ago

Une possibilité valable semble être de créer une fonction unique qui ouvre, extrait puis ferme l'accès à la bdd.

DonovanMaillard commented 5 years ago

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 ;)

DonovanMaillard commented 5 years ago

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.

DonovanMaillard commented 5 years ago

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 :)

remymoine commented 5 years ago

Nickel pour la connexion ! Quelques modifications apportées pour complément mais ça tourne très bien avec notre BDD aussi. Top !

DonovanMaillard commented 5 years ago

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.