2017-09-04 2 views
0

Je dois maintenant quand une ligne a changé dans mon DB. J'utilise phoenix 1.2.4. J'ai déjà les déclencheurs utilisant postgres, mais en fait je ne sais pas si j'en ai besoin. Savez-vous comment je pourrais résoudre mon problème?Recevez les notifications db (dans postgres) de mise à jour dans phoenix

REMARQUE: La base de données n'est pas nécessairement modifiée à partir des contrôleurs, mais j'ai un cron qui met à jour certaines parties.

+0

Je les déclencheurs, mais comment ces déclencheurs peuvent exécuter une fonction d'élixir? –

Répondre

2

J'ai vu ce tutoriel (Publish/subscribe with PostgreSQL and Phoenix Framework) il y a quelques jours et il semble qu'il contient exactement ce que vous voulez.

Il configure la notification à partir de la base de données, puis la diffuse. Dans votre cas, vous avez juste besoin de la partie de notification et devrait être tout bon.

J'espère que cela :)

2

Postgrex.Notifications est le module qui utilisera postgresql listen/notify pour transmettre des messages à un processus d'élixir.

Un exemple simple:

defmodule MyListener do 
    use GenServer 

    def start_link(), do: GenServer.start_link(__MODULE__, []) 

    def init(_arg) do 
    {:ok, pid} = Postgrex.Notifications.start_link(MyRepo.config()) 
    Postgrex.Notifications.listen(pid, "my_table") 
    {:ok, []} 
    end 

    def handle_info({:notification, _connection_pid, _ref, _channel, payload}, state) do 
    # ... do something with payload ... 
    {:noreply, state} 
    end 
end