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

PgBouncer持续出现IPv6本地连接失败警告的解决求助

PostgreSQL与PgBouncer连接警告问题排查与解决

问题描述

初始问题

使用PostgreSQL 12和PgBouncer 1.22-1时,pgbouncer.log里一直弹出这个警告:

WARNING sbuf_connect failed to connect to [::1]:5432: No route to host

我的PgBouncer databases配置是这样的:

* = host=localhost port=5432

而且/etc/hosts里已经把127.0.0.1和[::1]都映射到localhost了。想知道为啥PgBouncer非要用IPv6连PostgreSQL,怎么消掉这个警告?

更新排查结果

后来发现问题出在PostgreSQL没监听::1地址。我pg_hba.conf里明明加了这行配置:

host    all             all             ::1/128                 trust

但用psql --host ::1连PostgreSQL的时候,还是报错:

Is the server running on host "::1" and accepting TCP/IP connections on port 5432?

原因分析

为啥PgBouncer优先用IPv6?因为系统DNS解析时,会把localhost对应的IPv6地址(::1)排在IPv4(127.0.0.1)前面。PgBouncer解析localhost时,会先试第一个返回的地址也就是::1,可PostgreSQL没监听这个地址,自然连不上就出警告了。

解决办法

两种方案选一个就行:

方案1:让PostgreSQL开启IPv6监听

  1. 打开PostgreSQL的配置文件postgresql.conf
  2. 找到listen_addresses参数,改成包含::1的地址,比如:
    listen_addresses = 'localhost, ::1'
    # 也可以直接设为'*'监听所有地址,根据自己的安全需求选
    
  3. 重启PostgreSQL服务,配置就生效了
  4. 验证一下:用psql --host ::1测试连接,能连上就没问题

方案2:强制PgBouncer用IPv4连接

  1. 打开PgBouncer的配置文件(一般是pgbouncer.ini)
  2. 修改databases段的host参数,直接写IPv4地址127.0.0.1,别用localhost:
    * = host=127.0.0.1 port=5432
    
  3. 重启PgBouncer服务,之后日志里的IPv6连接警告就没了

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:10:05