Psycopg 2.4.2 released

Posted by Daniele Varrazzo on 2011-06-12
Tagged as news, release

Psycopg 2.4.2 has been released: it brings a few small but interesting new features, and a lot of bug fixes.

Transaction control has been overhauled: a new connection method set_session() allows setting all the session properties affecting the transactions behaviour: the isolation level but it can also be used to have auto-commit, read-only, and deferrable transactions. You can use for example:

conn.set_session('read committed')
conn.set_session(readonly=True, autocommit=True)
conn.set_session('serializable',
                 readonly=True, deferrable=True)

There is also a welcome improvement for all the users thinking that

conn.set_isolation_level(
    psycopg2.extensions.ISOLATION_LEVEL_AUTOCOMMIT)

was an excessively verbose syntax: a new read/write property allows to set

conn.autocommit = True

a much handier syntax for an often used connection property.

The improvements to the transactions control are not only at interface level: Psycopg doesn't require any more setup queries when connecting to a database. A sequence of statements:

import psycopg2
conn = psycopg2.connect('')
curs = conn.cursor()
curs.execute('SELECT 1')
curs.execute('SELECT 2')
conn.commit()

in older versions of the library would have resulted in the following commands sent to the backend:

SHOW default_transaction_isolation
SET DATESTYLE TO 'ISO'
SHOW client_encoding
BEGIN; SET TRANSACTION ISOLATION LEVEL READ COMMITTED
SELECT 1
SELECT 2
COMMIT

In Psycopg 2.4.2 the only commands sent are instead the essential:

BEGIN
SELECT 1
SELECT 2
COMMIT

with the BEGIN/COMMIT obviously omitted in autocommit mode (the datestyle and encoding statements were already dropped in 2.3).

The new release also brings a lot of bug fixes, so we encourage updating soon, particularly if you use Psycopg in multithread programs:

  • Fixed bug with multithread code potentially causing loss of sync with the server communication or lock of the client (ticket #55).
  • Don't fail import if mx.DateTime module can't be found, even if its support was built (ticket #53): a fix for the "ghost mx.DateTime" issue reported in virtualenv.
  • Fixed escape for negative numbers prefixed by minus operator (ticket #57).
  • Fixed GC race condition during copy in multithread programs, potentially resulting in refcount errors. Fixed by Dave Malcolm (ticket #58, Red Hat Bug 711095).
  • Trying to execute concurrent operations on the same connection through concurrent green thread results in an error instead of a deadlock.
  • Fixed detection of pg_config on Windows. Report and fix, plus some long needed setup.py cleanup by Steve Lacy: thanks!