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

使用pg_upgrade从PostgreSQL11升级到14时遇fe_sendauth无密码错误

解决pg_upgrade迁移PostgreSQL 11到14时的"fe_sendauth: no password supplied"错误

针对你遇到的问题,以下是几个无需修改pg_hba.conf为trust的可行方案:

1. 修正.pgpass文件的格式与权限

  • 匹配Unix套接字的格式:由于旧实例启动时指定了unix_socket_directories='/home/'且listen_addresses='',你的.pgpass条目需要对应这个套接字目录,格式应为:
    /home/:5433:*:你的超级用户名:密码
    
    (*用于匹配所有数据库,确保pg_upgrade连接任意数据库都能匹配到密码)
  • 严格设置文件权限:PostgreSQL会忽略权限大于0600的.pgpass文件,执行以下命令修正:
    chmod 0600 /path/to/your/.pgpass
    chown postgres:postgres /path/to/your/.pgpass
    

2. 强制pg_upgrade继承环境变量

直接在pg_upgrade命令前指定所需环境变量,避免环境变量继承失败:

PGPASSFILE=/home/postgres/.pgpass PGHOST=/home/ ./pg_upgrade --check --link -b /home/postgres/bin -B /usr/pgsql-14/bin -d /home/postgres/data -D /var/lib/pgsql/14/data -p 5433 -P 5432 -U postgres

(替换上述路径为你实际的二进制目录、数据目录、超级用户名)

3. 手动指定pg_upgrade的连接参数

在pg_upgrade命令中明确指定Unix套接字路径,确保连接时使用正确的套接字:

./pg_upgrade --check --link \
  -b /home/postgres/bin \
  -B /usr/pgsql-14/bin \
  -d /home/postgres/data \
  -D /var/lib/pgsql/14/data \
  -p 5433 \
  -P 5432 \
  -U postgres \
  --host=/home/

4. 提前验证旧实例连接正确性

在执行pg_upgrade前,先通过psql验证用相同参数能否连接旧实例:

PGHOST=/home/ PGPASSFILE=/home/postgres/.pgpass psql -p 5433 -U postgres template1

如果这个连接成功,说明.pgpass和环境变量配置正确,再执行pg_upgrade即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 08:43:35