Не удалось запустить запрос с использованием Postgrex в Elixir
Я пытаюсь запустить SQL-запрос, используя библиотеку Postgrex:
# lib/dashboard.ex
defmodule Dashboard do
def init() do
{:ok, pid} = Postgrex.start_link(hostname: "localhost", username: "postgres", database: "postgres")
pid
end
def query(pid) do
Postgrex.query(pid, "SELECT * from tickets", [])
end
end
pid = Dashboard.init()
IO.puts Dashboard.query(pid)
Когда я бегу mix run
Я получаю эту ошибку в консоли:
17:34:17.223 [error] GenServer #PID<0.135.0> terminating
** (stop) exited in: GenServer.call(Postgrex.TypeManager, {:get, Postgrex.DefaultTypes, {'localhost', 5432, "postgres"}}, 5000)
** (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
(elixir) lib/gen_server.ex:824: GenServer.call/3
lib/postgrex/protocol.ex:650: Postgrex.Protocol.bootstrap/3
lib/postgrex/protocol.ex:504: Postgrex.Protocol.handshake/2
lib/db_connection/connection.ex:135: DBConnection.Connection.connect/2
lib/connection.ex:622: Connection.enter_connect/5
(stdlib) proc_lib.erl:247: :proc_lib.init_p_do_apply/3
Last message: nil
State: Postgrex.Protocol
Немного предыстории:
Когда я проверяю, жив ли процесс, используя
Process.alive?(pid)
это возвращаетсяtrue
,Кроме того, когда я запускаю приложение с помощью
iex -S mix
звонитpid = Dashboard.init()
а такжеDashboard.query(pid)
после этого он работает без ошибок, и я получаю результаты этого запроса в консоли.Каждый раз, когда я запускаю приложение, через
mix run
Я получаю тот же PID -#PID<0.135.0>
Итак, вопросы:
- Как заставить его работать, когда я запускаю приложение через
mix run
? - Почему PID всегда одинаковый, когда я запускаю приложение через
mix run
? Когда я использую интерактивную консоль, PID отличается дляPostgrex.start_link
вызов