MagicStack / MagicStack/asyncpg

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

Open
#988 5 comments 3 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
8.1k
Forks
468
PR merge metrics
No merged PRs in 30d

Description

* **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](https://github.com/magicstack/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 0x7fd3d018e550>

but when go to the background task query , the pool.acquire, got an "released"

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

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the Sanic and tortoise-orm request-handler versus background-task examples in the issue, then trace the pool.acquire and pool release paths shown in the screenshots. Reproduce the released PoolConnectionProxy error if possible and determine whether the background query uses a connection after release; done means the cause and a project-side fix or confirmed usage issue are documented.

Written by the indexing model from the issue text.

Assessment

Tech stack
postgresql, python
Domain
backend, databases
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.