【问题标题】:PostgreSQL OSError: Multiple exceptions: [Errno 111] Connect call failed ('127.0.0.1', 5432), [Errno 99] Cannot assign requested addressPostgreSQL OSError: Multiple exceptions: [Errno 111] Connect call failed ('127.0.0.1', 5432), [Errno 99] Cannot assign requested address
【发布时间】:2021-06-02 12:46:29
【问题描述】:

所以我是 PostgreSQL 的新手,我创建了我的服务器和数据库以及表和其他东西,然后我回到 repl.it discord.py 并尝试运行这个:

async def create_db_pool():
  client.pg_con = await asyncpg.create_pool(database= "mainbank", user = "postgres", password = password)

client.loop.run_until_complete(create_db_pool())

错误:

Traceback (most recent call last):
  File "main.py", line 204, in <module>
    client.loop.run_until_complete(create_db_pool())
  File "/usr/lib/python3.8/asyncio/base_events.py", line 616, in run_until_complete
    return future.result()
  File "main.py", line 39, in create_db_pool
    client.pg_con = await asyncpg.create_pool(database= "mainbank", user = "postgres", password = password)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/asyncpg/pool.py", line 407, in _async__init__
    await self._initialize()
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/asyncpg/pool.py", line 435, in _initialize
    await first_ch.connect()
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/asyncpg/pool.py", line 127, in connect
    self._con = await self._pool._get_new_connection()
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/asyncpg/pool.py", line 477, in _get_new_connection
    con = await connection.connect(
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/asyncpg/connection.py", line 1980, in connect
    return await connect_utils._connect(
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/asyncpg/connect_utils.py", line 677, in _connect
    raise last_error
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/asyncpg/connect_utils.py", line 661, in _connect
    con = await _connect_addr(
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/asyncpg/connect_utils.py", line 634, in _connect_addr
    tr, pr = await compat.wait_for(connector, timeout=timeout)
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/asyncpg/compat.py", line 103, in wait_for
    return await asyncio.wait_for(fut, timeout)
  File "/usr/lib/python3.8/asyncio/tasks.py", line 494, in wait_for
    return fut.result()
  File "/opt/virtualenvs/python3/lib/python3.8/site-packages/asyncpg/connect_utils.py", line 544, in _create_ssl_connection
    tr, pr = await loop.create_connection(
  File "/usr/lib/python3.8/asyncio/base_events.py", line 1033, in create_connection
    raise OSError('Multiple exceptions: {}'.format(
OSError: Multiple exceptions: [Errno 111] Connect call failed ('127.0.0.1', 5432), [Errno 99] Cannot assign requested address

怎么了?是我这边还是 PostgreSQL?我将主机设置为 localhost,端口设置为 5432(全部默认)

【问题讨论】:

    标签: python python-3.x postgresql discord.py


    【解决方案1】:

    您在该机器上的 TCP 连接似乎太多了。每当你connect(2) 建立一个TCP 连接(而你没有bind(2) 的套接字到某个端口)时,网络套接字就会被操作系统分配一个ephemeral port。如果机器上没有空闲的临时端口,你会得到错误EADDRNOTAVAIL

    EADDRNOTAVAIL

    (Internet 域套接字)sockfd 引用的套接字以前没有绑定到地址,并且在尝试 将其绑定到临时端口,确定临时端口范围内的所有端口号当前都在使用中。见 在ip(7) 中讨论/proc/sys/net/ipv4/ip_local_port_range

    要么打开更少的 TCP 连接,要么增加临时端口的范围。

    【讨论】:

    • 那么我该如何解决这个问题呢?我不是端口和套接字之类的专家。我是想去我的电脑上更改 TCP 连接,还是 PostgreSQL 上的机器?
    • 它是客户端机器。找一个了解网络的人。您可以增加限制,就像答案所说的那样,但是您可能有大量的传出网络连接(某处泄漏?)。先检查一下。
    【解决方案2】:

    我在 Docker 容器中运行 Python FastAPI 应用程序时遇到了同样的错误,该应用程序尝试使用http3.AsyncClient 连接到另一个容器(在这两种情况下都使用了asyncio 库)以获取另一个应用程序的响应。 @Laurenz Albe 的上述答案将我引导至

    docker system prune -a
    

    应用程序在此之后运行。如果尝试连接到 127.0.0.1 但容器不在 host 网络上,我也可以重现此错误。

    【讨论】:

    • 谨慎使用。它将删除 - 所有停止的容器 - 至少一个容器未使用的所有网络 - 没有至少一个容器与之关联的所有图像 - 所有构建缓存
    • @CaseySchneider,谢谢,你是对的。没想到,是在开发环境中。
    猜你喜欢
    • 2013-12-26
    • 1970-01-01
    • 1970-01-01
    • 2014-04-14
    • 2023-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    相关资源
    最近更新 更多