-
Notifications
You must be signed in to change notification settings - Fork 435
Open
Description
When pgbouncer kills a connection due to its query_wait_timeout, the error message is not propagated to the client. All that is provided to the client is a not very helpful message "connection was closed in the middle of operation". This error message seems to be correctly handled by psql and psycopg.
I replicated this by using a pgbouncer instance with a pool_size of 1 and made sure another connection was consuming this connection to ensure that the connection would be put in a waiting mode.
asyncpg version
> python -c 'import asyncpg; print(asyncpg.__version__)'
0.31.0
Example asyncpg code
import asyncio
import asyncpg
async def main():
conn = await asyncpg.connect('postgresql://postgres@localhost:6432/postgres')
row = await conn.execute('SELECT 1')
asyncio.run(main())Stdout from the above code
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.12/asyncio/runners.py", line 194, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/lib/python3.12/asyncio/base_events.py", line 687, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "<stdin>", line 3, in main
File "/path/to/venv/lib/python3.12/site-packages/asyncpg/connection.py", line 349, in execute
result = await self._protocol.query(query, timeout)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "asyncpg/protocol/protocol.pyx", line 375, in query
asyncpg.exceptions.ConnectionDoesNotExistError: connection was closed in the middle of operation
Example code for psycopg
import psycopg
with psycopg.connect("postgresql://postgres:@localhost:6432/postgres") as conn:
with conn.cursor() as cur:
cur.execute("SELECT 1")
example traceback from psycopg
Traceback (most recent call last):
File "<stdin>", line 3, in <module>
File "/path/to/venv/lib/python3.12/site-packages/psycopg/cursor.py", line 97, in execute
raise ex.with_traceback(None)
psycopg.errors.ProtocolViolation: query_wait_timeout
Example call and stdout from psql on query_wait_timeout
> psql \
'postgresql://postgres:@localhost:6432/postgres' \
--command='SELECT 1'
FATAL: query_wait_timeout
server closed the connection unexpectedly
This probably means the server terminated abnormally
before or while processing the request.
connection to server was lostReactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels