psycopg release notes#

Future releases#

Psycopg 3.2 (unreleased)#

  • Add support for integer, floating point, boolean NumPy scalar types (ticket #332).

  • Add Raw Query Cursors to execute queries using placeholders in PostgreSQL format ($1, $2…) (ticket #560).

  • Add set_autocommit() on sync connections, and similar transaction control methods available on the async connections.

  • Add support for libpq functions to close prepared statements and portals introduced in libpq v17 (ticket #603).

  • Disable receiving more than one result on the same cursor in pipeline mode, to iterate through nextset(). The behaviour was different than in non-pipeline mode and not totally reliable (ticket #604). The Cursor now only preserves the results set of the last execute(), consistently with non-pipeline mode.

Current release#

Psycopg 3.1.14#

Psycopg 3.1.13#

  • Raise DataError instead of whatever internal failure trying to dump a time object with with a tzinfo specified as ZoneInfo (ambiguous offset, see ticket #652).

  • Handle gracefully EINTR on signals instead of raising InterruptedError, consistently with PEP 475 guideline (ticket #667).

  • Fix support for connection strings with multiple hosts/ports and for the load_balance_hosts connection parameter (ticket #674).

  • Fix memory leak receiving notifications in Python implementation (ticket #679).

Psycopg 3.1.12#

  • Fix possible hanging if a connection is closed while querying (ticket #608).

  • Fix memory leak when register_*() functions are called repeatedly (ticket #647).

  • Release Python 3.12 binary packages.

Psycopg 3.1.11#

  • Avoid caching the parsing results of large queries to avoid excessive memory usage (ticket #628).

  • Fix integer overflow in C/binary extension with OID > 2^31 (ticket #630).

  • Fix loading of intervals with days and months or years (ticket #643).

  • Work around excessive CPU usage on Windows (reported in ticket #645).

  • Fix building on Solaris and derivatives (ticket #632).

  • Fix possible lack of critical section guard in async executemany().

  • Fix missing pipeline fetch in async scroll().

  • Build binary packages with libpq 15.4, which allows group-readable permissions on the SSL certificate on the client (ticket #528).

Psycopg 3.1.10#

  • Allow JSON dumpers to dump bytes directly instead of str, for better compatibility with libraries like orjson and msgspec (ticket #569)

  • Fix prepared statement cache validation when exiting pipeline mode (or executemany()) in case an error occurred within the pipeline (ticket #585).

  • Fix connect() to avoid “leaking” an open PGconn attached to the OperationalError in case of connection failure. Error.pgconn is now a shallow copy of the real libpq connection, and the latter is closed before the exception propagates (ticket #565).

  • Fix possible (ignored) exception on objects deletion (ticket #591).

  • Don’t clobber a Python exception raised during COPY FROM with the resulting QueryCanceled raised as a consequence (ticket #593).

  • Fix resetting Connection.read_only and deferrable to their default value using None (ticket #612).

  • Add support for Python 3.12.

Psycopg 3.1.9#

  • Fix TypeInfo.fetch() using a connection in sql_ascii encoding (ticket #503).

  • Fix “filedescriptor out of range” using a large number of files open in Python implementation (ticket #532).

  • Allow JSON dumpers to be registered on dict or any other object, as was possible in psycopg2 (ticket #541).

  • Fix canceling running queries on process interruption in async connections (ticket #543).

  • Fix loading ROW values with different types in the same query using the binary protocol (ticket #545).

  • Fix dumping recursive composite types (ticket #547).

Psycopg 3.1.8#

  • Don’t pollute server logs when types looked for by TypeInfo.fetch() are not found (ticket #473).

  • Set Cursor.rowcount to the number of rows of each result set from executemany() when called with returning=True (ticket #479).

  • Fix TypeInfo.fetch() when used with ClientCursor (ticket #484).

Psycopg 3.1.7#

  • Fix server-side cursors using row factories (ticket #464).

Psycopg 3.1.6#

  • Fix cursor.copy() with cursors using row factories (ticket #460).

Psycopg 3.1.5#

  • Fix array loading slowness compared to psycopg2 (ticket #359).

  • Improve performance around network communication (ticket #414).

  • Return bytes instead of memoryview from pq.Encoding methods (ticket #422).

  • Fix Cursor.rownumber to return None when the result has no row to fetch (ticket #437).

  • Avoid error in Pyright caused by aliasing TypeAlias (ticket #439).

  • Fix Copy.set_types() used with varchar and name types (ticket #452).

  • Improve performance using Row factories (ticket #457).

Psycopg 3.1.4#

  • Include error classes defined in PostgreSQL 15.

  • Add support for Python 3.11 (ticket #305).

  • Build binary packages with libpq from PostgreSQL 15.0.

Psycopg 3.1.3#

  • Restore the state of the connection if is terminated prematurely (ticket #382).

  • Fix regression introduced in 3.1 with different named tuples mangling rules for non-ascii attribute names (ticket #386).

  • Fix handling of queries with escaped percent signs (%%) in ClientCursor (ticket #399).

  • Fix possible duplicated BEGIN statements emitted in pipeline mode (ticket #401).

Psycopg 3.1.2#

  • Fix handling of certain invalid time zones causing problems on Windows (ticket #371).

  • Fix segfault occurring when a loader fails initialization (ticket #372).

  • Fix invalid SAVEPOINT issued when entering Connection.transaction() within a pipeline using an implicit transaction (ticket #374).

  • Fix queries with repeated named parameters in ClientCursor (ticket #378).

  • Distribute macOS arm64 (Apple M1) binary packages (ticket #344).

Psycopg 3.1.1#

  • Work around broken Homebrew installation of the libpq in a non-standard path (ticket #364)

  • Fix possible “unrecognized service” error in async connection when no port is specified (ticket #366).

Psycopg 3.1#

Psycopg 3.0.17#

  • Fix segfaults on fork on some Linux systems using ctypes implementation (ticket #300).

  • Load bytea as bytes, not memoryview, using ctypes implementation.

Psycopg 3.0.16#

  • Fix missing rowcount after SHOW (ticket #343).

  • Add scripts to build macOS arm64 packages (ticket #162).

Psycopg 3.0.15#

  • Fix wrong escaping of unprintable chars in COPY (nonetheless correctly interpreted by PostgreSQL).

  • Restore the connection to usable state after an error in stream().

  • Raise DataError instead of OverflowError loading binary intervals out-of-range.

  • Distribute manylinux2014 wheel packages (ticket #124).

Psycopg 3.0.14#

  • Raise DataError dumping arrays of mixed types (ticket #301).

  • Fix handling of incorrect server results, with blank sqlstate (ticket #303).

  • Fix bad Float4 conversion on ppc64le/musllinux (ticket #304).

Psycopg 3.0.13#

  • Fix slowness (ticket #286).

  • Fix oid for lists of integers, which might cause the server choosing bad plans (ticket #293).

  • Make Connection.cancel() on a closed connection a no-op instead of an error.

Psycopg 3.0.12#

Psycopg 3.0.11#

  • Fix DataError loading arrays with dimensions information (ticket #253).

  • Fix hanging during COPY in case of memory error (ticket #255).

  • Fix error propagation from COPY worker thread (mentioned in ticket #255).

Psycopg 3.0.10#

  • Leave the connection in working state after interrupting a query with Ctrl-C (ticket #231).

  • Fix Cursor.description after a COPY … TO STDOUT operation (ticket #235).

  • Fix building on FreeBSD and likely other BSD flavours (ticket #241).

Psycopg 3.0.9#

  • Set Error.sqlstate when an unknown code is received (ticket #225).

  • Add the tzdata package as a dependency on Windows in order to handle time zones (ticket #223).

Psycopg 3.0.8#

  • Decode connection errors in the client_encoding specified in the connection string, if available (ticket #194).

  • Fix possible warnings in objects deletion on interpreter shutdown (ticket #198).

  • Don’t leave connections in ACTIVE state in case of error during COPY … TO STDOUT (ticket #203).

Psycopg 3.0.7#

Psycopg 3.0.6#

Psycopg 3.0.5#

  • Fix possible “Too many open files” OS error, reported on macOS but possible on other platforms too (ticket #158).

  • Don’t clobber exceptions if a transaction block exit with error and rollback fails (ticket #165).

Psycopg 3.0.4#

  • Allow to use the module with strict strings comparison (ticket #147).

  • Fix segfault on Python 3.6 running in -W error mode, related to backport.zoneinfo ticket #109.

  • Build binary package with libpq versions not affected by CVE-2021-23222 (ticket #149).

Psycopg 3.0.3#

  • Release musllinux binary packages, compatible with Alpine Linux (ticket #141).

  • Reduce size of binary package by stripping debug symbols (ticket #142).

  • Include typing information in the psycopg_binary package.

Psycopg 3.0.2#

Psycopg 3.0.1#

  • Fix use of the wrong dumper reusing cursors with the same query but different parameter types (ticket #112).

Psycopg 3.0#

First stable release. Changed from 3.0b1:

Psycopg 3.0b1#

  • First public release on PyPI.