# Psycopg changelog > The PostgreSQL database adapter for Python. - Vendor: Psycopg - Category: Frameworks & Libraries - Official site: https://www.psycopg.org - Tracked by: What's New (https://whatsnew.fyi/product/psycopg) - Harvested from: Registry (pypi: psycopg) - Entries below: 15 (newest first) What's New is an index, not a publisher: every entry below links to the vendor's own release notes, which are the authoritative source. Entries are labelled where they are hand-curated sample data, pre-releases, or drawn from a secondary source such as a developer blog. Reuse: the summaries, labels and curation here are © What's New. Quote freely with attribution and a link back; wholesale republication of the corpus is not permitted — terms: https://whatsnew.fyi/terms. The vendors' own release notes remain their publishers'. ## Releases ### 3.3.4 - Date: 2026-05-01 - Version: 3.3.4 - Original notes: https://pypi.org/project/psycopg/3.3.4/ - Permalink: https://whatsnew.fyi/product/psycopg/releases/3.3.4 - **fixed** — Fix possible spurious connection timeout in systems with very long uptimes in C extension - **fixed** — Fix client-side adaptation of enums whose name require quotes - **fixed** — Consistently populate statusmessage after executemany() - Fix possible spurious connection timeout in systems with very long uptimes in C extension (ticket #1280). - Fix client-side adaptation of enums whose name require quotes (ticket #1298). - Consistently populate statusmessage after executemany() (ticket #1302). ### 3.3.3 - Date: 2026-02-18 - Version: 3.3.3 - Original notes: https://pypi.org/project/psycopg/3.3.3/ - Permalink: https://whatsnew.fyi/product/psycopg/releases/3.3.3 - **fixed** — Retain Error.pgconn when raising a single exception for multiple connection attempt errors - **fixed** — Return a proper error when server sends ErrorResponse for a Sync after a Parse - Retain Error.pgconn when raising a single exception for multiple connection attempt errors (ticket #1246). - Return a proper error when server sends ErrorResponse for a Sync after a Parse (ticket #1260). ### 3.3.2 - Date: 2025-12-06 - Version: 3.3.2 - Original notes: https://pypi.org/project/psycopg/3.3.2/ - Permalink: https://whatsnew.fyi/product/psycopg/releases/3.3.2 Fix race condition in adapters at startup (ticket #1230). ### 3.3.1 - Date: 2025-12-02 - Version: 3.3.1 - Original notes: https://pypi.org/project/psycopg/3.3.1/ - Permalink: https://whatsnew.fyi/product/psycopg/releases/3.3.1 Fix iteration on server-side cursors (ticket #1226). ### 3.3.0 - Date: 2025-12-01 - Version: 3.3.0 - Original notes: https://pypi.org/project/psycopg/3.3.0/ - Permalink: https://whatsnew.fyi/product/psycopg/releases/3.3.0 - **added** — Add template strings queries - **added** — Enable adaptation of Python objects to PostgreSQL composites and back even if they are not sequences or if they take keyword arguments - **changed** — Cursors are now iterators, not just iterables, allowing next(cur) or anext(cur) to be called - **added** — Add Cursor.set_result() and Cursor.results() to move across the result sets of queries executed through executemany() or execute() with multiple statements - **added** — Add Transaction status to report the status during and after a transaction() block - **changed** — Allow to change loaders using register_loader() on Cursor.adapters after a query result has been already returned - **added** — Add pq.PGconn.used_gssapi attribute and Capabilities.has_used_gssapi() function - **added** — Add ConnectionInfo.full_protocol_version attribute and Capabilities.has_full_protocol_version() function - **changed** — Disable default GSSAPI preferential connection in the binary package - **removed** — Drop support for Python 3.8 and 3.9 New top-level features - Add template strings queries (ticket #1054). - More flexible composite adaptation: it is now possible to adapt Python objects to PostgreSQL composites and back even if they are not sequences or if they take keyword arguments (ticket #932, ticket #1202). - Cursors are now iterators, not just iterables. This means you can call next(cur) or anext(cur), which is useful as a type-safe expression (ticket #1064). - Add Cursor.set_result() and Cursor.results() to move across the result sets of queries executed though executemany() or execute() with multiple statements (tickets #1080, #1170). - Add Transaction status to report the status during and after a transaction() block (ticket #969). - Allow to change loaders using register_loader() on Cursor.adapters after a query result has been already returned (ticket #884). New libpq wrapper features - Add pq.PGconn.used_gssapi attribute and Capabilities.has_used_gssapi() function (ticket #1138). - Add ConnectionInfo.full_protocol_version attribute, Capabilities.has_full_protocol_version() function (ticket #1079). Other changes - Disable default GSSAPI preferential connection in the binary package (ticket #1136). Warning Please explicitly set the gssencmode connection parameter or the PGGSSENCMODE environment variable to interact reliably with the GSSAPI. - Drop support for Python 3.8 (ticket #976) and 3.9 (ticket #1056). ### 3.2.13 - Date: 2025-11-21 - Version: 3.2.13 - Original notes: https://pypi.org/project/psycopg/3.2.13/ - Permalink: https://whatsnew.fyi/product/psycopg/releases/3.2.13 - **changed** — Show the host name in the error message in case of name resolution error - **fixed** — Fix Cursor.copy() and AsyncCursor.copy() to hold the connection lock for the entire operation, preventing concurrent access issues - **fixed** — Fix GSSAPI check with C extension built with libpq < v16 - Show the host name in the error message in case of name resolution error (ticket #1205). - Fix Cursor.copy() and AsyncCursor.copy() to hold the connection lock for the entire operation, preventing concurrent access issues (ticket #1210). - Fix GSSAPI check with C extension built with libpq < v16 (ticket #1216). ### 3.2.12 - Date: 2025-10-26 - Version: 3.2.12 - Original notes: https://pypi.org/project/psycopg/3.2.12/ - Permalink: https://whatsnew.fyi/product/psycopg/releases/3.2.12 - **fixed** — Allow copy to pass different types per column, as long as the database can convert them, fixing a regression introduced in 3.2.11 - Allow copy to pass different types per column, as long as the database can convert them. Regression introduced in 3.2.11 (ticket #1192). ### 3.2.11 - Date: 2025-10-18 - Version: 3.2.11 - Original notes: https://pypi.org/project/psycopg/3.2.11/ - Permalink: https://whatsnew.fyi/product/psycopg/releases/3.2.11 - **fixed** — Fix spurious readiness flags in some of the wait functions - **fixed** — Fix high CPU usage using the wait_c function on Windows - **fixed** — Fix bad data on error in binary copy - **fixed** — Respect Copy.set_types() in TEXT copy in C version, consistently with the Python version - **fixed** — Don't raise warning, and don't leak resources, if a builtin function is used as JSON dumper/loader function - **changed** — Improve performance of Python conversion on results loading - Fix spurious readiness flags in some of the wait functions (ticket #1141). - Fix high CPU usage using the wait_c function on Windows (ticket #645). - Fix bad data on error in binary copy (ticket #1147). - Respect Copy.set_types() in TEXT copy in C version, consistently with the Python version (ticket #1153). - Don’t raise warning, and don’t leak resources, if a builtin function is used as JSON dumper/loader function (ticket #1165). - Improve performance of Python conversion on results loading (ticket #1155). ### 3.2.10 - Date: 2025-09-08 - Version: 3.2.10 - Original notes: https://pypi.org/project/psycopg/3.2.10/ - Permalink: https://whatsnew.fyi/product/psycopg/releases/3.2.10 - **fixed** — Fix TypeError shadowing CancelledError upon task cancellation during pipeline execution - **fixed** — Fix memory leak when lambda/local functions are used as argument for set_json_dumps(), set_json_loads() - **fixed** — Fix coordination of executemany() with other concurrent operations on other cursors - **fixed** — Fix leak receiving notifications if the notifies() generator is not called - **changed** — Notifications received when a handler is registered via add_notify_handler() will not be yielded by the notifies() generator if the generator is not running - **deprecated** — Using both the notifies() generator and add_notify_handler() to receive notifications on the same connection - **added** — Add support for Python 3.14 - **fixed** — Fix psycopg_binary.__version__ - **security** — Raise a warning if a GSSAPI connection is obtained using the gssencmode=prefer libpq default - Fix TypeError shadowing CancelledError upon task cancellation during pipeline execution (ticket #1005). - Fix memory leak when lambda/local functions are used as argument for set_json_dumps(), set_json_loads() (ticket #1108). - Fix coordination of executemany() with other concurrent operations on other cursors (ticket #1130). - Fix leak receiving notifications if the notifies() generator is not called (ticket #1091). Warning This bugfix required the introduction of a change in notifies reception behaviour. If a notification is received when a handler is registered via add_notify_handler() and the notifies() generator is not running the notification will not be yielded by the generator. This is a behaviour similar to before Psycopg 3.2.4, but notifications are not lost if no handler is registered. Using both the generator and handlers to receive notifications on the same connection is therefore deprecated and will now generate a runtime warning. - Add support for Python 3.14 (ticket #1053). - Fix psycopg_binary.__version__. - Raise a warning if a GSSAPI connection is obtained using the gssencmode=prefer libpq default (see ticket #1136). Warning In a future Psycopg version the default in the binary package will be changed to disable. If you need to interact with the GSSAPI reliably you should explicitly set the gssencmode parameter in the connection string or the PGGSSENCMODE environment variable to prefer or require. ### 3.2.9 - Date: 2025-05-13 - Version: 3.2.9 - Original notes: https://pypi.org/project/psycopg/3.2.9/ - Permalink: https://whatsnew.fyi/product/psycopg/releases/3.2.9 - **fixed** — Revert the libpq included in the binary packages from conda forge to vcpkg to fix GSS connection crashes - Revert the libpq included in the binary packages from conda forge to vcpkg because GSS connection crashes (ticket #1088). ### 3.2.8 - Date: 2025-05-11 - Version: 3.2.8 - Original notes: https://pypi.org/project/psycopg/3.2.8/ - Permalink: https://whatsnew.fyi/product/psycopg/releases/3.2.8 - **fixed** — DateFromTicks and TimeFromTicks return values to return a date and a time referred to the UTC timezone rather than to the local timezone, and TimestampFromTicks to return a datetime in UTC rather than in the local timezone - **fixed** — rownumber after using scroll() on AsyncServerCursor - **fixed** — interval parsing with days or other parts and negative time in C module - **fixed** — Don't process further connection attempts after Ctrl-C - **fixed** — cursors to correctly iterate over rows even if their row factory returns None - **fixed** — ConnectionInfo.port when the port is specified as an empty string - **changed** — Report all the attempts error messages in the exception raised for a connection failure - **changed** — Improve logging on connection - **added** — Add support for PostgreSQL 18 libpq - Fix DateFromTicks and TimeFromTicks return values to return a date and a time referred to the UTC timezone rather than to the local timezone. For consistency, TimestampFromTicks to return a datetime in UTC rather than in the local timezone (ticket #1058). - Fix rownumber after using scroll() on AsyncServerCursor (ticket #1066). - Fix interval parsing with days or other parts and negative time in C module (ticket #1071). - Don’t process further connection attempts after Ctrl-C (ticket #1077). - Fix cursors to correctly iterate over rows even if their row factory returns None (ticket #1073). - Fix ConnectionInfo.port when the port is specified as an empty string (ticket #1078). - Report all the attempts error messages in the exception raised for a connection failure (ticket #1069). - Improve logging on connection (ticket #1085). - Add support for PostgreSQL 18 libpq (ticket #1082). ### 3.2.7 - Date: 2025-04-30 - Version: 3.2.7 - Original notes: https://pypi.org/project/psycopg/3.2.7/ - Permalink: https://whatsnew.fyi/product/psycopg/releases/3.2.7 - **added** — Add SRID support to shapely dumpers/loaders - **added** — Add support for binary hstore - Add SRID support to shapely dumpers/loaders (ticket #1028). - Add support for binary hstore (ticket #1030). ### 3.2.6 - Date: 2025-03-12 - Version: 3.2.6 - Original notes: https://pypi.org/project/psycopg/3.2.6/ - Permalink: https://whatsnew.fyi/product/psycopg/releases/3.2.6 - **fixed** — Connection semantic when using target_session_attrs=prefer-standby - Fix connection semantic when using target_session_attrs=prefer-standby (ticket #1021). ### 3.2.5 - Date: 2025-02-22 - Version: 3.2.5 - Original notes: https://pypi.org/project/psycopg/3.2.5/ - Permalink: https://whatsnew.fyi/product/psycopg/releases/3.2.5 - 3x faster UUID loading thanks to C implementation (tickets #447, #998). ### 3.2.4 - Date: 2025-01-15 - Version: 3.2.4 - Original notes: https://pypi.org/project/psycopg/3.2.4/ - Permalink: https://whatsnew.fyi/product/psycopg/releases/3.2.4 - **fixed** — Don't lose notifies received whilst the notifies() iterator is not running - **fixed** — Make sure that the notifies callback is called during the use of the notifies() generator - **fixed** — Raise the correct error returned by the database such as AdminShutdown or IdleInTransactionSessionTimeout instead of a generic OperationalError when a server error causes a client disconnection - **changed** — Build macOS dependencies from sources instead of using the Homebrew versions - **changed** — Bump libpq to 17.2 in Linux and macOS binary packages - **changed** — Bump libpq to 16.4 in Windows binary packages, using the vcpkg library - Don’t lose notifies received whilst the notifies() iterator is not running (ticket #962). Warning If you were using notifications to bridge the time between issuing a LISTEN on a channel and starting the iterator you might receive duplicate notifications. - Make sure that the notifies callback is called during the use of the notifies() generator (ticket #972). - Raise the correct error returned by the database (such as AdminShutdown or IdleInTransactionSessionTimeout) instead of a generic OperationalError when a server error causes a client disconnection (ticket #988). - Build macOS dependencies from sources instead using the Homebrew versions in order to avoid problems with MACOSX_DEPLOYMENT_TARGET (ticket #858). - Bump libpq to 17.2 in Linux and macOS binary packages. - Bump libpq to 16.4 in Windows binary packages, using the vcpkg library (ticket #966).