You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用psycopg2连接PostgreSQL遭拒绝:FastAPI无法连接已运行数据库

排查方案
  • 核对psycopg2连接参数
    把TablePlus里的连接参数(主机、端口、用户名、密码、数据库名)原封不动写到测试代码里,避免拼写错误。比如:

    import psycopg2
    try:
        conn = psycopg2.connect(
            host="127.0.0.1",
            port=5432,
            user="你的用户名",
            password="你的密码",
            dbname="你的数据库名"
        )
        print("连接成功")
        conn.close()
    except Exception as e:
        print(f"错误: {e}")
    

    在FastAPI的虚拟环境里单独运行这段代码,如果报错,说明参数或环境有问题;如果成功,再检查FastAPI应用里的连接逻辑是否存在参数覆盖。

  • 验证PostgreSQL实际监听端口
    查看postgresql.conf里的port配置项,确认是否为5432。也可以执行ps aux | grep postgres,查看启动参数里是否指定了其他端口。另外,确保PostgreSQL是完全重启后的状态——执行pg_ctl stop -m fast彻底停服后,再用pg_ctl start重启,避免旧进程残留导致端口冲突。

  • 尝试Unix Socket连接
    TablePlus可能默认用Unix域套接字连接(而非TCP/IP),而psycopg2指定TCP连接引发异常。可以把psycopg2的host参数改成PostgreSQL的套接字路径,比如:

    conn = psycopg2.connect(
        host="/var/run/postgresql",  # macOS系统通常是/tmp,可在postgresql.conf的unix_socket_directories项查看
        user="你的用户名",
        password="你的密码",
        dbname="你的数据库名"
    )
    
  • 检查虚拟环境依赖
    确认FastAPI使用的虚拟环境里,psycopg2(或psycopg2-binary)正常安装。可重新安装依赖:

    pip uninstall psycopg2 psycopg2-binary
    pip install psycopg2-binary
    

    部分情况下,依赖包损坏会导致连接异常。

  • 排查容器环境(如果使用)
    若在容器内运行uvicorn,127.0.0.1指向容器内部,而非宿主机的PostgreSQL。此时需将连接host改为宿主机IP(如192.168.x.x),或在Docker运行时添加--network=host参数,让容器共享宿主机网络。

内容的提问来源于stack exchange,提问作者Vansh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:42:19