У меня есть несколько тысяч баз данных. Я хочу подключиться к каждому из них последовательно по одному и выполнить запрос. Я делаю это, запуская процесс Postgrex, подобный этому, для каждого.
{:ok, pid} =
Postgrex.start_link(
port: database.port,
hostname: database.host,
username: database.username,
password: database.password,
database: database.database_name
)
Затем я выдаю Postgrex.query
, а затем останавливаю его вот так
:ok = GenServer.stop(pid, :normal)
Кажется, все работает хорошо, за исключением того, что у меня заканчиваются тысячи Postgrex.TypeServer
процессов, занимающих память, которые, кажется, не очищаются в течение длительного времени.
Есть ли лучший способ очистить процесс Postgrex
так что TypeServer
тоже остановлен?
Я на Postgrex 0.13.3.
РЕДАКТИРОВАТЬ:
Чтобы немного прояснить ситуацию, я бы хотел очищайте TypeServer после каждого процесса Postgrex. Очистка всех TypeServers после того, как весь Enum.map сделан, не так уж полезна для меня, потому что это приводит к медленному росту памяти, за которым следует резкое падение, а не плоская линия.
Enum.map(databases, fn database ->
{:ok, pid} = Postgrex.start_link(port: database.port, hostname: database.host, username: database.username, password: database.password, database: database.database_name)
Postgrex.query!(pid, "some query", [])
:ok = GenServer.stop(pid, :normal)
# something here to clean up the TypeServer
end)