<div dir="ltr">Hi, list,<div><br></div><div>I'm glad to announce that we just tagged a next major release of epgsql - PostgreSQL driver / connector for Erlang.</div><div><br></div><div><a href="https://github.com/epgsql/epgsql/releases/tag/4.0.0">https://github.com/epgsql/epgsql/releases/tag/4.0.0</a><br></div><div><br></div><div>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.</div><div><br></div><div><div>Changes:</div><div><br></div><div>* Make epgsql commands pluggable  (see pluggable_commands.md).</div><div>  Now we are not limited only by API functions provided by epgsql (equery/squery/prepared_query etc),</div><div>  but may create own commands as a plugins. Still, understanding of PostgreSQL network protocol needed</div><div>  to be able to do so.</div><div>* Make epgsql datatype encoding/decdoding pluggable (see pluggable_types.md).</div><div>  Now we are able to add or tweak codecs for existing as well as custom PostgreSQL</div><div>  datatypes (like datetime, varchar, enum, arrays etc).</div><div>  XXX: Highly recommend to add `{codecs, []}` option to your epgsql:connect/X calls if you don't use</div><div>  PostGIS and hstore datatypes: this will reduce connection setup time.</div><div>* epgsql internals had a huge refactoring (4,000 additions and 1,750 deletions for ~5500 LOC project).</div><div>  Code now is much more modular, documented and have a lot of internal typespecs. Performance</div><div>  improvements are also expected.</div><div>* Now we try to use iolists as much as possible and avoid binary and string concatenations when ever possible.</div><div>  Expect noticeable performance improvements for large BYTEA / TEXT / VARCHAR / JSON / JSONB etc fields.</div><div>* Extended and documented epgsql:with_transaction/3.</div><div>  Now it's possible to preserve original exception's stacktrace, finally!</div><div>* macaddr and macaddr8 datatypes support added</div><div>* Float datatype support was extended with `nan`, `minus_infinity`, `plus_infinity`</div><div>* elvis code style check was added to our travis pipeline</div><div>* Brand-new PostgreSQL 10 scram-sha-256 auth method added</div><div>  (see <a href="https://www.postgresql.org/docs/10/static/auth-methods.html#AUTH-PASSWORD">https://www.postgresql.org/docs/10/static/auth-methods.html#AUTH-PASSWORD</a> and</div><div>  <a href="https://www.postgresql.org/docs/current/static/sasl-authentication.html">https://www.postgresql.org/docs/current/static/sasl-authentication.html</a>)</div><div>* A lot of typespecs were rewritten and lots of internal typespecs were added</div><div><br></div><div>Incompatibilities:</div><div><br></div><div>* Some unexpected performance issues may appear, but we expect performance improvements, especially</div><div>  for a large result sets (when a lot of rows are returned by a query) and for large string/json/blob</div><div>  query parameters</div><div>* Undocumented epgsql:update_type_cache/2 API was changed</div><div>* A lot of typespecs were updated. Some typespecs were deprecated or moved from epgsql.erl to other</div><div>  modules. So, some new dialyzer warnings might pop-up</div><div>* Some new error messages might be returned, especially from epgsql:connect/X functions</div><div>* Memory consumption per-connection might slightly grow because we maintain per-connection OID<->codec</div><div>  mapping table, which might be quite big in some cases. This also may produce bigger error_logger</div><div>  reports in case of epgsql connection process crashes.</div><div>* Some exported .hrl files have been changed. #column{} and #statement{} record definitions were extended.</div><div>* PostGIS users might be affected by cleanup of ewkb.erl and epgsql_geometry.hrl</div><div>* Streaming replication users should pay extra attention. No tests were broken, but a lot of</div><div>  modifications were made to this code.</div><div>* Passing integer / atom / float as a value of a text / varchar / bytea query parameter is now</div><div>  deprecated (so, `epgsql:equery(C, "SELECT $1::text", [my_atom])` will still work but is not recommended)</div><div>* Redshift and CockroachDB users might expirience some problems. Please, report bugs!</div></div><div><br></div><div>And I want to say thanks for all who was involved in this work, special thanks goes to @davidw.</div><div><br></div><div>Regards,</div><div>epgsql dev deam</div></div>