Improvements
-
Support Python 3.15 (#1367, #1378)
(by @elprans in 1b11846 and 58c0c59) -
Make pool
min_sizea maintained connection floor and addinit_sizeto
control the number of connections opened at startup (#1323).
Idle connections at or belowmin_sizeare retained, and closed connections
are replaced in the background.init_sizedefaults tomin_size.
To preserve the previous behavior, where the pool could drain to zero,
replacemin_size=Nwithinit_size=N, min_size=0.
(by @shatilov-diman in 67a1cbc) -
Use
hashlib.pbkdf2_hmac()for faster SCRAM password derivation (#1359)
(by @twelfthlabor in 00319a9) -
Use the statement cache for
copy_records_to_table()introspection (#1360)
(by @matemax in dd05865)
Fixes
-
Clean up connections rejected by
target_session_attrsimmediately so an
unresponsive rejected host cannot delay the selected connection, and cleanup
tasks cannot outlive the event loop. Rejected connections are aborted without
waiting for a graceful disconnect; servers may log "unexpected EOF on client
connection" if the Terminate message is not delivered before the transport
closes. -
Fix a connection pool deadlock when releasing a connection after a protocol
abort (#1324)
(by @pchaseh in 4a83cc2) -
Honor
Connection.close(timeout=...)while waiting for a pending
cancellation (#1361)
(by @gyanu2507 in c06bcb4) -
Prevent stuck cancellation from blocking connection teardown or pool release
by bounding cancellation with the command or release timeout (#1370)
(by @elprans in 4cf0220) -
Preserve the server error when the connection closes mid-operation (#1369)
(by @RitiGrover in 6c8f1a7) -
Fix COPY cleanup when a records generator raises, preserving the original
exception and avoiding protocol desynchronization and stalled rollback (#1358)
(by @CodingCossack in fdc6bc8) -
Reparse unnamed statements before cursor binding when the statement cache
is disabled (#1364)
(by @elprans in 302ba49) -
Allow cursors in transactions started outside
Connection.transaction(),
such as with an explicitBEGIN(#1350)
(by @aryansk in 25aaaf5) -
Remove the query logger when the
query_logger()block raises (#1373)
(by @kratos0718 in 6a7fbd3) -
Fix a segfault in
Record.get()with an invalid number of positional
arguments (#1333)
(by @apoorvdarshan in 40a3832) -
Align SSL startup retries with libpq and improve SSL rejection diagnostics
(#1366). Retry alternative transports only before authentication succeeds.
Direct TLS now requiressslmode=require,verify-ca, orverify-full,
or an explicitSSLContext.
(by @elprans in 78752c9) -
Preserve password errors during SSL fallback when the fallback fails with
a less specific authorization error (#1331)
(by @Mauricio0129 in 2d97947) -
Handle cleartext password authentication when no password is supplied
without raising anAttributeError(#1351)
(by @aryansk in 6be5915) -
Set the
postgresqlALPN protocol on SSL contexts created by asyncpg so
direct TLS connections work with PostgreSQL 17 and later (#1372).
User-provided contexts must set this protocol for direct TLS connections.
(by @DurandA in b21325d) -
Link explicitly against
libmon non-Windows platforms to fix undefined
math symbol errors when loading the extensions (#1305)
(by @veeceey in db8ecc2) -
Fix builds on FreeBSD 15 by linking against
libstdthreads(#1368)
(by @elprans in 87bcaf9)
Other
-
Replace
pkg_resourceswithpackaginginsetup.py(#1362)
(by @elprans in 6695db7) -
Build Linux and macOS ARM64 wheels on native runners and add Windows ARM64
wheel builds (#1308)
(by @ddelange in 1e8cc1c) -
Add manual and PR-label-triggered dry runs to the release workflow (#1374)
(by @elprans in 1bd643e) -
Clarify how
execute()uses prepared statements and how to confirm an
INSERTin the documentation (#1336)
(by @pctablet505 in cdf816c) -
Fix typos in comments and docstrings (#1332)
(by @maxtaran2010 in bc3e246)