asyncpg icon indicating copy to clipboard operation
asyncpg copied to clipboard

TimeoutError when connecting to server

Open juntatalor opened this issue 4 years ago • 5 comments

  • asyncpg version: 0.20.1, 0.19.0, 0.18.3, 0.17.0, 0.16.0
  • PostgreSQL version: 10.6
  • Do you use a PostgreSQL SaaS? If so, which? Can you reproduce the issue with a local PostgreSQL install?: No SaaS
  • Python version: 3.7.3
  • Platform: MacOs 10.15.4 / Alpine Linux
  • Do you use pgbouncer?: No
  • Did you install asyncpg with pip?: Tried both: pip and build from source
  • If you built asyncpg locally, which version of Cython did you use?: 0.29.14 for 0.20.1
  • Can the issue be reproduced under both asyncio and uvloop?: Yes, both with and without uvloop

Hi! I ran into a very strange behaviour of asyncpg. I can connect to a server with Postgresql 10.6 via psql, psycopg2, aoipg, but not asyncpg. The code is very simple:


async def main():
    print('start')
    c = await connect('postgresql://someuser:somepwd@somehost:5433/somedb')
    print('finish')

import asyncio

asyncio.run(main())

and get exception:

  File ".../tst_asyncpg.py", line 12, in <module>
    asyncio.run(main())
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/runners.py", line 43, in run
    return loop.run_until_complete(main)
  File "uvloop/loop.pyx", line 1456, in uvloop.loop.Loop.run_until_complete
  File ".../ceres/tst_asyncpg.py", line 7, in main
    c = await connect('<some dsn>')
  File ".../venv/lib/python3.7/site-packages/asyncpg/connection.py", line 1677, in connect
    max_cacheable_statement_size=max_cacheable_statement_size)
  File ".../venv/lib/python3.7/site-packages/asyncpg/connect_utils.py", line 663, in _connect
    raise last_error
  File ".../venv/lib/python3.7/site-packages/asyncpg/connect_utils.py", line 655, in _connect
    connection_class=connection_class)
  File ".../venv/lib/python3.7/site-packages/asyncpg/connect_utils.py", line 631, in _connect_addr
    await asyncio.wait_for(connected, timeout=timeout)
  File "/usr/local/Cellar/python/3.7.3/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/tasks.py", line 423, in wait_for
    raise futures.TimeoutError()
concurrent.futures._base.TimeoutError

This exception is raised after 60 seconds. I tired different versions of asyncpg, and the behaviour does not change. Right now i'm building library from source in hope to get some additional debug info. I'm nearly sure, that it is not a network issue (other libraries / utilities go well). I checked logs on postgresql, and have a 'canceling authentication due to timeout' for every connection attempt. By the way, i have another instance of postgresql on a server (different port), and it works well.

I will appreciate any advice, how to debug this problem. Thanks.

juntatalor avatar Apr 17 '20 18:04 juntatalor

Which authentication method do you use there?

elprans avatar Apr 17 '20 18:04 elprans

Simple authentication with password via connection string

juntatalor avatar Apr 20 '20 16:04 juntatalor

I changed password for user and the problem is gone. I don't know, is it worth to debug this issue deeper.

juntatalor avatar Apr 21 '20 11:04 juntatalor

I had the very same issue - I had a € sign in the password. After I removed that from the password, everything worked fine.

KaitoCross avatar Jul 07 '21 06:07 KaitoCross

Same TimeoutError, but in pair with SQLAlchemy. Here is my connection string (with postgres auth method set to trust), that caused an error:

postgresql+asyncpg://[email protected]:5432/postgres

After setting password to user everything seems to work fine. New connection string:

postgresql+asyncpg://postgres:[email protected]:5432/postgres

kazqvaizer avatar Dec 13 '21 13:12 kazqvaizer