Psycopg 2.8.3 released
We have released Psycopg 2.8.3, which includes a slight change to the logical replication.
Choosing the right frequency to send replication feedback messages from the client to the server was previously the developer's responsibility, with too many feedback messages being a waste of bandwidth and server resources, too few slowing down WAL cleanup and possibly preventing a server graceful shutdown.
Psycopg will now make sure that feedback is only sent after a certain period of time from the previous one, so that the client can simply call send_feedback() at each message without the fear of overwhelming the server.
For completeness, the changes included in the release are:
* Added interval_status parameter to start_replication() method and other facilities to send automatic replication keepalives at periodic intervals
* Fixed namedtuples caching introduced in 2.8
2.8.2:
Fixed "there's no async cursor" error polling a connection with no cursor.
Fixed RealDictCursor when there are repeated columns.
Fixed RealDictRow modifiability.
Binary packages built with OpenSSL 1.1.1b. Should fix concurrency problems.
Psycopg 2.8 released
After about two years from the previous major release, psycopg 2.8 is finally
here!
Among the highlights, PostgreSQL errors are now mapped to Python exceptions for
a more idiomatic way to handle them. Several additions allow a better insight
of the connection status and query results.
Behind the scene, asynchronous communication and concurrency received several
improvements, and dropping support for older versions of Python gave the chance
to refactor and modernise the codebase (with the especial help from Jon
Dufresne who ruthlessly butchered our code into a streamlined pulp).
What's new in psycopg 2.7.7
- Cleanup of the cursor results assignment code, which might have solved
double free and inconsistencies in concurrent usage.
- Wheel package compiled against OpenSSL 1.0.2q.
Psycopg 2.7.6:
Summary of changes:
- Close named cursors if exist, even if execute() wasn't called.
- Fixed building on modern FreeBSD versions with Python 3.7.
- Fixed hang trying to COPY via execute() in asynchronous connections.
- Fixed adaptation of arrays of empty arrays.
- Fixed segfault accessing the connection.readonly and connection.deferrable attributes repeatedly.
- execute_values() accepts sql.Composable objects.
- errorcodes map updated to PostgreSQL 11.
- Wheel package compiled against PostgreSQL 10.5 libpq and OpenSSL 1.0.2p.
What's new in psycopg 2.7.5:
- Allow non-ascii chars in namedtuple fields
- Fixed adaptation of arrays of arrays of nulls
- Fixed building on Solaris 11 and derivatives such as SmartOS and illumos
- Maybe fixed building on MSYS2
- Allow string subclasses in connection and other places
- Don't raise an exception closing an unused named cursor
- Wheel package compiled against PostgreSQL 10.4 libpq and OpenSSL 1.0.2o
What's new in psycopg 2.7.4
- Moving away from installing the wheel package by default.
Packages installed from wheel raise a warning on import. Added package
psycopg2-binary to install from wheel instead.
- Convert fields names into valid Python identifiers in
~psycopg2.extras.NamedTupleCursor.
- Fixed Solaris 10 support.
- cursor.mogrify() can be called on closed cursors.
- Fixed setting session characteristics in corner cases on autocommit
connections.
- Fixed ~psycopg2.extras.MinTimeLoggingCursor on Python 3.
- Fixed parsing of array of points as floats.
- Fixed ~psycopg2.__libpq_version__ building with libpq >= 10.1.
- Fixed ~cursor.rowcount after ~cursor.executemany() with :sql:RETURNING
statements.
- Fixed compatibility problem with pypy3.
- Wheel packages compiled against PostgreSQL 10.1 libpq and OpenSSL 1.0.2n.
- Wheel packages for Python 2.6 no more available (support dropped from
wheel building infrastructure).
What's new in psycopg 2.7.3.1
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Dropped libresolv from wheel package to avoid incompatibility with
glibc 2.26 (wheels ticket #2)
- Fixed inconsistent state in externally closed connections
Was fixed in 2.6.2 but not included in 2.7 by mistake.
- Fixed Python exceptions propagation in green callback
- Don't display the password in `connection.dsn` when the connection
string is specified as an URI
- Return objects with timezone parsing "infinity" :sql:`timestamptz`
- Dropped dependency on VC9 runtime on Windows binary packages
- Fixed segfault in `~connection.lobject()` when *mode*\=\ `!None`
- Fixed `~connection.lobject()` keyword argument *lobject_factory*
- Fixed `~psycopg2.extras.ReplicationCursor.consume_stream()`
*keepalive_interval* argument
- Maybe fixed random import error on Python 3.6 in multiprocess
environment
- Fixed random `!SystemError` upon receiving abort signal
- Accept `~psycopg2.sql.Composable` objects in
`~psycopg2.extras.ReplicationCursor.start_replication_expert()`
- Parse intervals returned as microseconds from Redshift
- Added `~psycopg2.extras.Json` `!prepare()` method to consider connection
params when adapting
- `~psycopg2.errorcodes` map updated to PostgreSQL 10 beta 1.
What's new in psycopg 2.7.1
^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Ignore `!None` arguments passed to `~psycopg2.connect()` and
`~psycopg2.extensions.make_dsn()` (🎫`#517`).
- OpenSSL upgraded from major version 0.9.8 to 1.0.2 in the Linux wheel
packages (🎫`#518`).
- Fixed build with libpq versions < 9.3 (🎫`#520`).
What's new in psycopg 2.7
-------------------------
New features:
- Added `~psycopg2.sql` module to generate SQL dynamically (🎫`#308`).
- Added :ref:`replication-support` (🎫`#322`). Main authors are
Oleksandr Shulgin and Craig Ringer, who deserve a huge thank you.
- Added `~psycopg2.extensions.parse_dsn()` and
`~psycopg2.extensions.make_dsn()` functions (🎟️`#321, #363`).
`~psycopg2.connect()` now can take both *dsn* and keyword arguments, merging
them together.
- Added `~psycopg2.__libpq_version__` and
`~psycopg2.extensions.libpq_version()` to inspect the version of the
``libpq`` library the module was compiled/loaded with
(🎟️`#35, #323`).
- The attributes `~connection.notices` and `~connection.notifies` can be
customized replacing them with any object exposing an `!append()` method
(🎫`#326`).
- Adapt network types to `ipaddress` objects when available. When not
enabled, convert arrays of network types to lists by default. The old `!Inet`
adapter is deprecated (🎟️`#317, #343, #387`).
- Added `~psycopg2.extensions.quote_ident()` function (🎫`#359`).
- Added `~connection.get_dsn_parameters()` connection method (🎫`#364`).
- `~cursor.callproc()` now accepts a dictionary of parameters (🎫`#381`).
- Give precedence to `!__conform__()` over superclasses to choose an object
adapter (🎫`#456`).
- Using Python C API decoding functions and codecs caching for faster
unicode encoding/decoding (🎫`#473`).
- `~cursor.executemany()` slowness addressed by
`~psycopg2.extras.execute_batch()` and `~psycopg2.extras.execute_values()`
(🎫`#491`).
- Added ``async_`` as an alias for ``async`` to support Python 3.7 where
``async`` will become a keyword (🎫`#495`).
- Unless in autocommit, do not use :sql:`default_transaction_*` settings to
control the session characteristics as it may create problems with external
connection pools such as pgbouncer; use :sql:`BEGIN` options instead
(🎫`#503`).
- `~connection.isolation_level` is now writable and entirely separated from
`~connection.autocommit`; added `~connection.readonly`,
`~connection.deferrable` writable attributes.
Bug fixes:
- Fixed error caused by missing decoding `~psycopg2.extras.LoggingConnection`
(🎫`#483`).
- Fixed integer overflow in :sql:`interval` seconds (🎫`#512`).
Other changes:
- Dropped support for Python 2.5 and 3.1.
- Dropped support for client library older than PostgreSQL 9.1 (but older
server versions are still supported).
- `~connection.isolation_level` doesn't read from the database but will return
`~psycopg2.extensions.ISOLATION_LEVEL_DEFAULT` if no value was set on the
connection.
- Empty arrays no more converted into lists if they don't have a type attached
(🎫`#506`)
What's new in psycopg 2.6.2
^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Fixed inconsistent state in externally closed connections
(🎟️`#263, #311, #443`).
- Report the server response status on errors (such as 🎫`#281`).
- Raise `!NotSupportedError` on unhandled server response status
(🎫`#352`).
- Allow overriding string adapter encoding with no connection (🎫`#331`).
- The `~psycopg2.extras.wait_select` callback allows interrupting a
long-running query in an interactive shell using :kbd:`Ctrl-C`
(🎫`#333`).
- Fixed `!PersistentConnectionPool` on Python 3 (🎫`#348`).
- Fixed segfault on `repr()` of an unitialized connection (🎫`#361`).
- Allow adapting bytes using `~psycopg2.extensions.QuotedString` on Python 3
(🎫`#365`).
- Added support for setuptools/wheel (🎫`#370`).
- Fix build on Windows with Python 3.5, VS 2015 (🎫`#380`).
- Fixed `!errorcodes.lookup` initialization thread-safety (🎫`#382`).
- Fixed `!read()` exception propagation in copy_from (🎫`#412`).
- Fixed possible NULL TZ decref (🎫`#424`).
- `~psycopg2.errorcodes` map updated to PostgreSQL 9.5.
Problems found with existing distfiles:
distfiles/D6.data.ros.gz
distfiles/cstore0.2.tar.gz
distfiles/data4.tar.gz
distfiles/sphinx-2.2.7-release.tar.gz
No changes made to the cstore or mariadb55-client distinfo files.
Otherwise, existing SHA1 digests verified and found to be the same on
the machine holding the existing distfiles (morden). All existing
SHA1 digests retained for now as an audit trail.
What's new in psycopg 2.6.1
^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Lists consisting of only `None` are escaped correctly (🎫`#285`).
- Fixed deadlock in multithread programs using OpenSSL (🎫`#290`).
- Correctly unlock the connection after error in flush (🎫`#294`).
- Fixed ``MinTimeLoggingCursor.callproc()`` (🎫`#309`).
What's new in psycopg 2.6
-------------------------
New features:
- Added support for large objects larger than 2GB. Many thanks to Blake Rouse
and the MAAS Team for the feature development.
- Python `time` objects with a tzinfo specified and PostgreSQL :sql:`timetz`
data are converted into each other (🎫`#272`).
Bug fixes:
- Json apapter's `!str()` returns the adapted content instead of the `!repr()`
(🎫`#191`).
What's new in psycopg 2.5.4
^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Added :sql:`jsonb` support for PostgreSQL 9.4 (🎫`#226`).
- Fixed segfault if COPY statements are passed to `~cursor.execute()` instead
of using the proper methods (🎫`#219`).
- Force conversion of pool arguments to integer to avoid potentially unbounded
pools (🎫`#220`).
- Cursors :sql:`WITH HOLD` don't begin a new transaction upon move/fetch/close
(🎫`#228`).
- Cursors :sql:`WITH HOLD` can be used in autocommit (🎫`#229`).
- `~cursor.callproc()` doesn't silently ignore an argument without a length.
- Fixed memory leak with large objects (🎫`#256`).
- Make sure the internal ``_psycopg.so`` module can be imported stand-alone (to
allow modules juggling such as the one described in 🎫`#201`).
What's new in psycopg 2.5.3
^^^^^^^^^^^^^^^^^^^^^^^^^^^
- Work around `pip issue #1630 <https://github.com/pypa/pip/issues/1630>`__
making installation via ``pip -e git+url`` impossible (🎫`#18`).
- Copy operations correctly set the `cursor.rowcount` attribute
(🎫`#180`).
- It is now possible to call `get_transaction_status()` on closed connections.
- Fixed unsafe access to object names causing assertion failures in
Python 3 debug builds (🎫`#188`).
- Mark the connection closed if found broken on `poll()` (from 🎫`#192`
discussion)
- Fixed handling of dsn and closed attributes in connection subclasses
failing to connect (from 🎫`#192` discussion).
- Added arbitrary but stable order to `Range` objects, thanks to
Chris Withers (🎫`#193`).
- Avoid blocking async connections on connect (🎫`#194`). Thanks to
Adam Petrovich for the bug report and diagnosis.
- Don't segfault using poorly defined cursor subclasses which forgot to call
the superclass init (🎫`#195`).
- Mark the connection closed when a Socket connection is broken, as it
happens for TCP connections instead (🎫`#196`).
- Fixed overflow opening a lobject with an oid not fitting in a signed int
(🎫`#203`).
- Fixed handling of explicit default ``cursor_factory=None`` in
`connection.cursor()` (🎫`#210`).
- Fixed possible segfault in named cursors creation.
- Fixed debug build on Windows, thanks to James Emerton.
either because they themselves are not ready or because a
dependency isn't. This is annotated by
PYTHON_VERSIONS_INCOMPATIBLE= 33 # not yet ported as of x.y.z
or
PYTHON_VERSIONS_INCOMPATIBLE= 33 # py-foo, py-bar
respectively, please use the same style for other packages,
and check during updates.
Use versioned_dependencies.mk where applicable.
Use REPLACE_PYTHON instead of handcoded alternatives, where applicable.
Reorder Makefile sections into standard order, where applicable.
Remove PYTHON_VERSIONS_INCLUDE_3X lines since that will be default
with the next commit.
Whitespace cleanups and other nits corrected, where necessary.
What's new in psycopg 2.5.1
---------------------------
- Fixed build on Solaris 10 and 11 where the round() function is already
declared (🎫`#146`).
- Fixed comparison of `Range` with non-range objects (🎫`#164`).
Thanks to Chris Withers for the patch.
- Fixed double-free on connection dealloc (🎫`#166`). Thanks to
Gangadharan S.A. for the report and fix suggestion.
What's new in psycopg 2.5
-------------------------
New features:
- Added :ref:`JSON adaptation <adapt-json>`.
- Added :ref:`support for PostgreSQL 9.2 range types <adapt-range>`.
- `connection` and `cursor` objects can be used in ``with`` statements
as context managers as specified by recent |DBAPI|_ extension.
- Added `~psycopg2.extensions.Diagnostics` object to get extended info
from a database error. Many thanks to Matthew Woodcraft for the
implementation (🎫`#149`).
- Added `connection.cursor_factory` attribute to customize the default
object returned by `~connection.cursor()`.
- Added support for backward scrollable cursors. Thanks to Jon Nelson
for the initial patch (🎫`#108`).
- Added a simple way to :ref:`customize casting of composite types
<adapt-composite>` into Python objects other than namedtuples.
Many thanks to Ronan Dunklau and Tobias Oberstein for the feature
development.
- `connection.reset()` implemented using :sql:`DISCARD ALL` on server
versions supporting it.
Bug fixes:
- Properly cleanup memory of broken connections (🎫`#148`).
- Fixed bad interaction of ``setup.py`` with other dependencies in
Distribute projects on Python 3 (🎫`#153`).
Other changes:
- Added support for Python 3.3.
- Dropped support for Python 2.4. Please use Psycopg 2.4.x if you need it.
- `~psycopg2.errorcodes` map updated to PostgreSQL 9.2.
- Dropped Zope adapter from source repository. ZPsycopgDA now has its own
project at <http://github.com/psycopg/ZPsycopgDA>.
What's new in psycopg 2.4.6
---------------------------
- Fixed 'cursor()' arguments propagation in connection subclasses
and overriding of the 'cursor_factory' argument. Thanks to
Corry Haines for the report and the initial patch (ticket #105).
- Dropped GIL release during string adaptation around a function call
invoking a Python API function, which could cause interpreter crash.
Thanks to Manu Cupcic for the report (ticket #110).
- Close a green connection if there is an error in the callback.
Maybe a harsh solution but it leaves the program responsive
(ticket #113).
- 'register_hstore()', 'register_composite()', 'tpc_recover()' work with
RealDictConnection and Cursor (ticket #114).
- Fixed broken pool for Zope and connections re-init across ZSQL methods
in the same request (tickets #123, #125, #142).
- connect() raises an exception instead of swallowing keyword arguments
when a connection string is specified as well (ticket #131).
- Discard any result produced by 'executemany()' (ticket #133).
- Fixed pickling of FixedOffsetTimezone objects (ticket #135).
- Release the GIL around PQgetResult calls after COPY (ticket #140).
- Fixed empty strings handling in composite caster (ticket #141).
- Fixed pickling of DictRow and RealDictRow objects.
* The close() methods on connections and cursors don't raise exceptions if
called on already closed objects.
* Fixed fetchmany() with no argument in cursor subclasses.
* Use lo_creat() instead of lo_create() when possible for better interaction
with pgpool-II.
* Error and its subclasses are picklable, useful for multiprocessing interaction
* Better efficiency and formatting of timezone offset objects thanks to Menno
Smits.
* Fixed rownumber during iteration on cursor subclasses. Regression introduced
in 2.4.4.
* Added support for inet arrays.
* Fixed commit() concurrency problem.
* Codebase cleaned up using the GCC Python plugin's static analysis tool, which
has revealed several unchecked return values, possible NULL dereferences,
reference counting problems.
While here, let to register egg-info.
What's new in psycopg 2.4.4
---------------------------
- 'register_composite()' also works with the types implicitly defined
after a table row, not only with the ones created by 'CREATE TYPE'.
- Values for the isolation level symbolic constants restored to what
they were before release 2.4.2 to avoid breaking apps using the
values instead of the constants.
- Named DictCursor/RealDictCursor honour itersize (ticket #80).
- Fixed rollback on error on Zope (ticket #73).
- Raise 'DatabaseError' instead of 'Error' with empty libpq errors,
consistently with other disconnection-related errors: regression
introduced in release 2.4.1 (ticket #82).
What's new in psycopg 2.4.3
---------------------------
- connect() supports all the keyword arguments supported by the
database
- Added 'new_array_type()' function for easy creation of array
typecasters.
- Added support for arrays of hstores and composite types (ticket #66).
- Fixed segfault in case of transaction started with connection lost
(and possibly other events).
- Fixed adaptation of Decimal type in sub-interpreters, such as in
certain mod_wsgi configurations (ticket #52).
- Rollback connections in transaction or in error before putting them
back into a pool. Also discard broken connections (ticket #62).
- Lazy import of the slow uuid module, thanks to Marko Kreen.
- Fixed NamedTupleCursor.executemany() (ticket #65).
- Fixed --static-libpq setup option (ticket #64).
- Fixed interaction between RealDictCursor and named cursors
(ticket #67).
- Dropped limit on the columns length in COPY operations (ticket #68).
- Fixed reference leak with arguments referenced more than once
in queries (ticket #81).
- Fixed typecasting of arrays containing consecutive backslashes.
- 'errorcodes' map updated to PostgreSQL 9.1.
* Added 'set_session()' method and 'autocommit' property to the
connection. Added support for read-only sessions and, for PostgreSQL
9.1, for the "repeatable read" isolation level and the "deferrable"
transaction property.
* Psycopg doesn't execute queries at connection time to find the
default isolation level.
* Fixed bug with multithread code potentially causing loss of sync
with the server communication or lock of the client.
* Don't fail import if mx.DateTime module can't be found, even if its
support was built.
* Fixed escape for negative numbers prefixed by minus operator.
* Fixed refcount issue during copy.
* Trying to execute concurrent operations on the same connection
through concurrent green thread results in an error instead of a
deadlock.
* Use own parser for bytea output, not requiring anymore the libpq 9.0 to parse
the hex format.
* Don't fail connection if the client encoding is a non-normalized variant.
* Correctly detect an empty query sent to the backend.
* Fixed a SystemError clobbering libpq errors raised without SQLSTATE.
* Fixed interaction between NamedTuple and server-side cursors.
* Allow to specify --static-libpq on setup.py command line instead of just in
'setup.cfg'.
* New features and changes:
- Added support for Python 3.1 and 3.2. The conversion has also
brought several improvements:
- Added 'b' and 't' mode to large objects: write can deal with both
bytes strings and unicode; read can return either bytes strings
or decoded unicode.
- COPY sends Unicode data to files implementing 'io.TextIOBase'.
- Improved PostgreSQL-Python encodings mapping.
- Added a few missing encodings: EUC_CN, EUC_JIS_2004, ISO885910,
ISO885916, LATIN10, SHIFT_JIS_2004.
- Dropped repeated dictionary lookups with unicode query/parameters.
- Improvements to the named cusors:
- More efficient iteration on named cursors, fetching 'itersize'
records at time from the backend.
- The named cursors name can be an invalid identifier.
- Improvements in data handling:
- Added 'register_composite()' function to cast PostgreSQL
composite types into Python tuples/namedtuples.
- Adapt types 'bytearray' (from Python 2.6), 'memoryview' (from
Python 2.7) and other objects implementing the "Revised Buffer
Protocol" to 'bytea' data type.
- The 'hstore' adapter can work even when the data type is not
installed in the 'public' namespace.
- Raise a clean exception instead of returning bad data when
receiving bytea in 'hex' format and the client libpq can't parse
them.
- Empty lists correctly roundtrip Python -> PostgreSQL -> Python.
- Other changes:
- 'cursor.description' is provided as named tuples if available.
- The build script refuses to guess values if 'pg_config' is not
found.
- Connections and cursors are weakly referenceable.
* Bug fixes
* Fixed segfault with middleware not passing DateStyle to the client
Changes 2.3.1:
* Fixed build problem on CentOS 5.5 x86_64
Changes 2.3.0:
psycopg 2.3 aims to expose some new features introduced in PostgreSQL 9.0.
* Main new features:
- `dict` to `hstore` adapter and `hstore` to `dict` typecaster, using both
9.0 and pre-9.0 syntax.
- Two-phase commit protocol support as per DBAPI specification.
- Support for payload in notifications received from the backed.
- `namedtuple`-returning cursor.
- Query execution cancel.
* psycopg/cursor_type.c: executemany() propagates exceptions raised by the
iterable to the caller.
* lib/pool.py: dropped logging.basicConfig() call. It messes up with
projects using logging but where no handler is installed on the root
logger.
* psycopg/cursor_type.c: exceptions raised in the columns iterator of the
copy methods propagated to the caller.
* psycopg/typecast_datetime.c: Round seconds in historical timezones to
the nearest minute.
* lib/extras.py: register_tstz_w_secs() is now no-op.
Changes 2.2.1:
* Builds again on Windows.
Changes 2.2.0:
* typecast.c: Fixed problem related to receiving None from Python
when a string was expected.
* psycopg/adapter_datetime.c: Fixed TimestampFromTicks for second
values > 59.5.
* psycopg/adapter_datetime.c: Fixed same bug for TimeFromTicks.
* Added typecasters for arrays of specific MX/Py time-related types.
* psycopg/adapter_[mx]datetime.c: Explicit cast of the SQL representation
of time-related objects.
* psycopg/adapter_binary.c: Adapt buffer objects using an explicit cast on
the string literal
* lib/pqpath.c: Fixed reference leak in notify reception.
* Notifies are collected if available after every query execution.
* lib/extensions.py: DECIMAL typecaster imported from _psycopg.
* lib/extensions.py: PY* and MX* time typecaster imported from _psycopg.
* psycopg/connection_type.c: Correctly parse keywords in connect().
* psycopg/pqpath.c: Ensure running COPY in blocking mode.
* psycopg/pqpath.c: Free the GIL in blocking operations in V2 COPY FROM.
* psycopg/pqpath.c: Evaluate Python objects only once outside the COPY I/O
loops.
* Fixed problem with asynchronous NOTIFYs.
* Integrated async pacthes from Jan's git tree.
- support for UUIDs
- fix issues with non-blocking connections and lo_write
- support reset() on connections as faster alternative to open()/close()
- improved support for COPY TO and COPY FROM
- bugfixes
- assume that Python 2.4 and 2.5 are compatible and allow checking for
fallout.
- remove PYTHON_VERSIONS_COMPATIBLE that are obsoleted by the 2.3+
default. Modify the others to deal with the removals.