2017-06-22 6 views
1

J'essaie de comprendre comment se connecter à une base de données postgres, exécuter une requête, puis déconnecter.Comment déconnecter une connexion Postgrex?

En regardant Postgrex, j'établir une connexion en utilisant

{:ok, pid} = Postgrex.start_link(hostname: "localhost", username: "postgres", password: "postgres", database: "postgres") 

Puis-je exécuter ma requête à l'aide

Postgrex.query!(pid, "SELECT user_id, text FROM comments", []) 

Mais alors, comment puis-je déconnecter?

Je souhaite me déconnecter parce que je parcourt N bases de données et exécute la même requête sur chacune d'entre elles.

J'ai essayé de quitter le processus, par ex. Process.exit(pid, :bye), mais il tue le processus de ponte aussi parce qu'il a commencé avec start_link/3. Je ne peux pas trouver une fonction start/3 dans Postgrex.

Répondre

3

Comme le pid retourné par Postgrex.start_link est un GenServer, vous pouvez utiliser GenServer.stop/1:

iex(1)> {:ok, pid} = Postgrex.start_link(hostname: "localhost", username: "postgres", password: "postgres", database: "postgres") 
{:ok, #PID<0.277.0>} 
iex(2)> GenServer.stop(pid)                         
:ok 
iex(3)> GenServer.stop(pid) 
** (exit) no process: the process is not alive or there's no process currently associated with the given name, possibly because its application isn't started 
    (stdlib) proc_lib.erl:797: :proc_lib.stop/3 
+0

Merci! Y a-t-il un risque de s'appuyer sur les détails de mise en œuvre de postgrex de cette façon? –