[erlang-questions] [ANN] Asynchronous PostgreSQL driver

Dmitry Demeshchuk demeshchuk@REDACTED
Tue Nov 1 08:59:58 CET 2011

On Tue, Nov 1, 2011 at 10:16 AM, Max Lapshin <max.lapshin@REDACTED> wrote:
> Anton, haven't you looked at modern mysql drivers? Maybe there is some
> code to share, like connection pool.

Just to mention, I have a small library that implements pools:
https://github.com/doubleyou/gen_pool . Feel free to use it.

> And also: I think it would be really very convenient to have something
> like implicit connection:
> epgsql:establish_connection(...)
> {ok, Result} = epgsql:query("SELECT * FROM articles ..");
> Usually you are working with single database and perhaps it would be
> good to have API for implicit singleton database connection.
> Passing established connection to database through all levels of
> business logic may be rather inconvenient sometimes and often
> ends in having global variables.

Or, rather, add an ability to use registered connections (or pools,
which is even better):

pgsql:connect(Name, Host, Port)

and then

pgsql:execute(Name, .....)


Here are some more thoughts:

1. It's kind of weird that you use such a sequence:

{ok, C} = pgsql_sock:start_link(),
pgsql_sock:connect(C, Host, Port, ...)

It would be more consistent if you passed all the necessary parameters
into pgsql_sock:start_link and initiated the connection in
pgsql_sock:init/1, so it will look like:

{ok, Pid} = pgsql_sock:start_link(Options)

where Options is a proplist.

2. Using a proplist of options instead of listing these options (like
host and port) as mandatory parameters may be reasonable.

3. It might be a good idea to use macros for default values (like
timeouts, port number and so on).

4. I'd also consolidate pgsql_binary and pgsql_wire modules. Probably,
also moved the functions with binary pattern matchings from pgsql_sock
too. After all, the entire purpose is to describe the PostgreSQL
protocol and it might be more convenient if it's handled by a single

P.S. Sometimes I so hate that the 'query' atom is reserved...

> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions

Best regards,
Dmitry Demeshchuk

More information about the erlang-questions mailing list