[erlang-questions] [ANN] epgsql 4.0.0 - new magor release of PostgreSQL connector

Сергей Прохоров seriy.pr@REDACTED
Thu Apr 12 12:38:59 CEST 2018

Hi, list,

I'm glad to announce that we just tagged a next major release of epgsql -
PostgreSQL driver / connector for Erlang.


We tried to maintain backward-compatibility as much as possible, so,
current users of basic epgsql features shouldn't notice any difference. If
you use some advanced features, please consult "Incompatibilities" section
and do some extra testing.


* Make epgsql commands pluggable  (see pluggable_commands.md).
  Now we are not limited only by API functions provided by epgsql
(equery/squery/prepared_query etc),
  but may create own commands as a plugins. Still, understanding of
PostgreSQL network protocol needed
  to be able to do so.
* Make epgsql datatype encoding/decdoding pluggable (see
  Now we are able to add or tweak codecs for existing as well as custom
  datatypes (like datetime, varchar, enum, arrays etc).
  XXX: Highly recommend to add `{codecs, []}` option to your
epgsql:connect/X calls if you don't use
  PostGIS and hstore datatypes: this will reduce connection setup time.
* epgsql internals had a huge refactoring (4,000 additions and 1,750
deletions for ~5500 LOC project).
  Code now is much more modular, documented and have a lot of internal
typespecs. Performance
  improvements are also expected.
* Now we try to use iolists as much as possible and avoid binary and string
concatenations when ever possible.
  Expect noticeable performance improvements for large BYTEA / TEXT /
VARCHAR / JSON / JSONB etc fields.
* Extended and documented epgsql:with_transaction/3.
  Now it's possible to preserve original exception's stacktrace, finally!
* macaddr and macaddr8 datatypes support added
* Float datatype support was extended with `nan`, `minus_infinity`,
* elvis code style check was added to our travis pipeline
* Brand-new PostgreSQL 10 scram-sha-256 auth method added
* A lot of typespecs were rewritten and lots of internal typespecs were


* Some unexpected performance issues may appear, but we expect performance
improvements, especially
  for a large result sets (when a lot of rows are returned by a query) and
for large string/json/blob
  query parameters
* Undocumented epgsql:update_type_cache/2 API was changed
* A lot of typespecs were updated. Some typespecs were deprecated or moved
from epgsql.erl to other
  modules. So, some new dialyzer warnings might pop-up
* Some new error messages might be returned, especially from
epgsql:connect/X functions
* Memory consumption per-connection might slightly grow because we maintain
per-connection OID<->codec
  mapping table, which might be quite big in some cases. This also may
produce bigger error_logger
  reports in case of epgsql connection process crashes.
* Some exported .hrl files have been changed. #column{} and #statement{}
record definitions were extended.
* PostGIS users might be affected by cleanup of ewkb.erl and
* Streaming replication users should pay extra attention. No tests were
broken, but a lot of
  modifications were made to this code.
* Passing integer / atom / float as a value of a text / varchar / bytea
query parameter is now
  deprecated (so, `epgsql:equery(C, "SELECT $1::text", [my_atom])` will
still work but is not recommended)
* Redshift and CockroachDB users might expirience some problems. Please,
report bugs!

And I want to say thanks for all who was involved in this work, special
thanks goes to @davidw.

epgsql dev deam
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20180412/9b470b0b/attachment.htm>

More information about the erlang-questions mailing list