[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.
https://github.com/epgsql/epgsql/releases/tag/4.0.0
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.
Changes:
* 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
pluggable_types.md).
Now we are able to add or tweak codecs for existing as well as custom
PostgreSQL
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`,
`plus_infinity`
* elvis code style check was added to our travis pipeline
* Brand-new PostgreSQL 10 scram-sha-256 auth method added
(see
https://www.postgresql.org/docs/10/static/auth-methods.html#AUTH-PASSWORD
and
https://www.postgresql.org/docs/current/static/sasl-authentication.html)
* A lot of typespecs were rewritten and lots of internal typespecs were
added
Incompatibilities:
* 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
epgsql_geometry.hrl
* 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.
Regards,
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