A new asyncpg release is here.
Notable additions include Python 3.9 support, support for recently added
PostgreSQL types like jsonpath
, and last but not least, vastly
improved executemany()
performance. Importantly, executemany()
is
also now atomic, which means that either all iterations succeed, or
none at all, whereas previously partial results would have remained in
place, unless executemany()
was called in a transaction.
There is also the usual assortment of improvements and bugfixes, see the
details below.
This is the last release of asyncpg that supports Python 3.5, which has
reached EOL last September.
Improvements
-
Vastly speedup executemany by batching protocol messages (#295)
(by @fantix in 690048d for #295) -
Allow using custom
Record
class
(by @elprans in db4f1a6 for #577) -
Add Python 3.9 support (#610)
(by @elprans in c05d726 for #610) -
Prefer SSL connections by default (#660)
(by @elprans in 16183aa for #660) -
Add codecs for a bunch of new builtin types (#665)
(by @elprans in b53f038 for #665) -
Expose Pool as
asyncpg.Pool
(#669)
(by @rugleb in 0e0eb8d for #669) -
Avoid unnecessary overhead during connection reset (#648)
(by @kitogo in ff5da5f for #648)
Fixes
-
Add a workaround for bpo-37658
(by @elprans in 2bac166 for #21894) -
Fix wrong default transaction isolation level (#622)
(by @fantix in 4a627d5 for #622) -
Fix
set_type_codec()
to accept standard SQL type names (#619)
(by @elprans in 68b40cb for #619) -
Ignore custom data codec for internal introspection (#618)
(by @fantix in e064f59 for #618) -
Fix null/NULL quoting in array text encoder (#627)
(by @fantix in 92aa806 for #627) -
Fix link in connect docstring (#653)
(by @samuelcolvin in 8b313bd for #653) -
Make asyncpg work with pyinstaller (#651)
(by @Atem18 in 5ddabb1 for #651) -
Fix possible
AttributeError
exception inConnectionSettings
(#632)
(by @petriborg in 0d23182 for #632) -
Prohibit custom codecs on domains
(by @elprans in 50f964f for #457) -
Raise proper error on anonymous composite input (tuple arguments) (#664)
(by @elprans in 7252dbe for #664) -
Fix incorrect application of custom codecs in some cases (#662)
(by @elprans in 50f65fb for #662)
Assets
2
Improvements
-
Add support for password functions (useful for RDS IAM auth) (#554)
(by Harvey Frye in 1d9457f for #554) -
Add support for connection termination listeners (#525)
(by @iomintz in 8141b93 for #525) -
Update CI matrix, aarch64 builds (#595)
(by @Gelbpunkt in ac6a2fc for #595)
Fixes
-
Fix possible uninitalized pointer access on unexpected array
message data (CVE-2020-17446, by @elprans in 69bcdf5,
reported by @risicle) -
Fix Connection class _copy_in private method
(by @ABCDeath in 7f5c2a2 for #555) -
Bump pgproto to fix compilation issues
(by @elprans in aa67d61 for #565) -
Improve pool documentation examples (#491)
(by @nyurik in 745f8f8 for #491) -
Update usage.rst (#572)
(by @xuedong09 in f5b425a for #572) -
Fix links in connection documentation (#584)
(by @samuelcolvin in b081320 for #584) -
Fix usage documentation for hstore (#515)
(by @aaliddell in 39040b3 for #515)
Assets
2
Improvements
Bug Fixes
-
Handle IP values with prefix in "inet" type as
ipaddress.IPvXInterface
(by @elprans in 5a4daf7 for #497) -
Close transport if connection times out
(by @hexrain in 926f483 for #468) -
Use faster UUID codecs; make UUID decoding/encoding/operations 2-7x faster
(by @1st1 in edde3ff) -
Use
loop.start_tls()
to upgrade connections to SSL
(by @1st1 in bdba7ce)
Build
Assets
2
Improvements
Bug Fixes
-
Remove preexec_fn hack from test cluster management
(by @elprans in 36ed11d) -
Fix DeprecationWarning in the docstring of copy_from_query()
(by @elprans in 482a39a) -
Allow specifying the target version when generating the release log
(by @elprans in 43a7b21) -
Check for .flake8 after importing flake8
(by @dotlambda in aaeb707) -
Include .flake8 in PyPI tarball
(by @dotlambda in 43c6b9c) -
Fix _StatementCache.clear() PS memory leak
(by @un-def in f4aa9bf for #416) -
fix for warning_callback not yet defined
(by @samuelcolvin in 354d9be) -
Fix assertion fail on copy_records_to_table
(by Petr Reznikov in ae5a89d) -
Do not look for a port in a Unix socket domain path
(by @Lawouach in b773912 for #419) -
Unquote connection string components properly
(by @elprans in 5513b9d for #418) -
Remove superfluous transaction from a cursor example
(by @elprans in 32fccaa for #475)
Assets
2
Bug Fixes
Assets
2
Assets
2
Improvements
-
Internal asyncpg errors are now consistently raised as
InternalClientError
(by @elprans in 263de3f) -
Allow mappings as composite type input
(by @elprans in eaa2fa1 for #349) -
Add
BitString.to_int()
andBitString.from_int()
(by @percontation in ffd134e) -
Allow 'sslmode' in DSNs
(by @percontation in 0304288) -
Add support for specifying multiple host addresses when connecting
(by @elprans in 1d650ed for #257) -
Low-level protocol implementation has been tweaked and
optimized for slightly better performance in certain scenarios
(by @elprans in 7a81613 and cc053fe) -
Queries with cached statements now generate fewer TCP packets
(by @aleksey-mashanov in bf07199) -
Allow aliasing builtin types by name in
set_builtin_type_codec()
(by @elprans in 687127e) -
Factor out generic PostgreSQL protocol helpers into a separate package
(by @1st1 in f0adefc) -
Fix tests and enable CI for PostgreSQL 11
(by @elprans in ddb0ec2 and 716fd9d)
Bug Fixes
Assets
2
Improvements
Official support for Python 3.7.
Bug Fixes
-
Fix garbage collection of connections and emit a
ResourceWarning
if an unclosed connection is garbage collected.
(by @1st1 in d9a236e for #323) -
Raise a clear error if there's a race in pool intialization.
(by @1st1 in 3565ef8 for #320) -
Channel names in
Connection.add_listener()
and
Connection.remove_listener()
are now quoted properly.
(by @sqwishy in 3e6ade6) -
Fixed endianness detection on *BSD systems.
(by @elprans in 8c83add for #313) -
Fixed handling of large type OIDs.
(by @elprans in 2624bdb for #300)