%% supervisor spec:
{ok, DbPoolOpts} = application:get_env(db_pool),
PoolName = sp_db,
PoolArgs = [{name, {local, PoolName}},
{worker_module, PoolName},
{size, proplists:get_value(size, DbPoolOpts, 10)},
{max_overflow, proplists:get_value(max_overflow, DbPoolOpts, 15)}],
{ok, PoolWorkerArgs} = application:get_env(db), ...
Childs = [
poolboy:child_spec(PoolName, PoolArgs, PoolWorkerArgs), % postgres
...
]
-module(sp_db).
-behaviour(poolboy_worker).
-export([start_link/1]).
-export([get_conn/0, return_conn/1, transaction/1]).
start_link([Host, Username, Password, Opts]) ->
pgsql:connect(Host, Username, Password, Opts).
-spec get_conn() -> pid().
get_conn() ->
poolboy:checkout(?MODULE).
-spec return_conn(pid()) -> ok.
return_conn(C) ->
poolboy:checkin(?MODULE, C).
проблемма с пулбоем очень простая, если вдруг пропадёт коннекция или перезапустишь БДто пул завалится, а вмести с ним вероятно и вся нода.Используем специальный форк пулбоя от ddosia для борьбы с данным эффектом.
--