Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

asyncpg.exceptions._base.InterfaceError: cannot call Connection.fetch(): connection has been released back to the pool #988

Open
iyuhang opened this issue Dec 20, 2022 · 3 comments

Comments

@iyuhang
Copy link

iyuhang commented Dec 20, 2022

  • asyncpg version: 0.26.0
  • PostgreSQL version: 12.0
  • Do you use a PostgreSQL SaaS? If so, which? Can you reproduce : NO, from pg docker
    the issue with a local PostgreSQL install?
    : YES,
  • Python version: Python 3.9.13
  • Platform: MAC
  • Do you use pgbouncer?: No
  • Did you install asyncpg with pip?: From tortoise-orm
  • If you built asyncpg locally, which version of Cython did you use?: No
  • Can the issue be reproduced under both asyncio and
    uvloop?
    : YES

I am using Sanic + tortoise-orm,

the test code as below:

image

when runs a query during the Request handler, it runs successfully

while runs in a background task, it report this error:

asyncpg.exceptions._base.InterfaceError: cannot call Connection.fetch(): connection has been released back to the pool

I found when the first time query, through the pool.acquire, got the right <PoolConnectionProxy <asyncpg.connection.Connection object at 0x7fd42102f9e0> 0x7fd3d018e550>

but when go to the background task query , the pool.acquire, got an "released" <PoolConnectionProxy [released] 0x7fd3d018e550>

I am confused how can I got an released PoolConnectionProxy from the same code

[query in the get Request method]
query in get

[query in the background task]
query in task

[the pool connection acquire method]
acquire

[the pool connection release method]
release

@VyachAp
Copy link

VyachAp commented Apr 12, 2023

Faced the same issue. Any solutions here?

@teleportx
Copy link

Same issue

@larsblumberg
Copy link

larsblumberg commented Aug 29, 2024

Hi @iyuhang, thanks for giving this detailed report. Using another web framework (Quart) with asyncpg I am running into exactly the same issue: A background task is constantly acquiring released connections, resulting in

InterfaceError

cannot call Connection.fetch(): connection has been released back to the pool

Noteworthy to say that this behavior, keeps appearing and disappearing: My background task periodically runs a certain query every some minutes. And there are long streaks where all just works fine. And then there are periods, where all connection attempts fail due to this "released connection" issue.

It seems it has to do with sharing the same asyncpg connection pool across different Tasks. Could there be a bug in asyncpg?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants