[Python-modules-team] Bug#960499: python3-psycopg2: fails with "psycopg2.OperationalError: insufficient data in "T" message"

Karsten Hilbert Karsten.Hilbert at gmx.net
Mon Jun 22 13:48:43 BST 2020


On Wed, May 13, 2020 at 09:13:42AM -0400, Scott Kitterman wrote:

> > Any ideas where else to look ?
>
> It would surprise me if this turned out to be relevant, but since it's
> probably easy to check, I'll toss it out there:
>
> In psycopg2 2.8 the function where the traceback is triggered has been modified
> to use OrderedDict.
>
> "/usr/lib/python3/dist-packages/psycopg2/extras.py", line 142, in
> execute return super(DictCursor, self).execute(query, vars)
>
> It looks like the commit where that change was made it pretty self contained
> [1].  You might try putting the 2.7 version of DictCursor back (reverting that
> commit) and see if the problem persists.
>
> It's kind of a shot in the dark, but one has to start somewhere.

It turned out to be an unholy interaction between threads
inadvertently sharing a connection. Using a connection per
thread solves the issue.

However, the strange parts:

1) The very same code (sharing the connection between
   threads) _does_ work with psycopg2 2.7.

2) psycopg2 states that sharing connections among threads is
   considered to be safe (threadsafety=2). To note, the threads
   do _not_ share cursors.

At any rate, as far as GNUmed is concerned, the issue has
been fixed or, per(!)spectively, worked around so the bug can
be closed.

Maybe one cannot hold open cursors concurrently on the a
transaction shared by threads.

Karsten
--
GPG  40BE 5B0E C98E 1713 AFA6  5BC0 3BEA AC80 7D4F C89B



More information about the Python-modules-team mailing list