使用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
相关产品推荐
相关产品推荐

