如何解决Ubuntu Focal WSL中PostgreSQL升级的权限拒绝问题?
解决PostgreSQL升级时的权限错误问题
问题核心原因
出现Permission denied是因为/var/lib/postgresql/16/main目录默认归postgres用户所有,普通用户或root直接执行命令没有写入权限;另外你命令里的配置文件路径也存在错误——你升级的是PostgreSQL 12到16,但--old-options里写的是10版本的配置文件,这会引发额外问题。
修复步骤
以postgres用户身份执行命令
直接用sudo指定postgres用户运行升级命令,避免权限问题:sudo -u postgres /usr/lib/postgresql/16/bin/pg_upgrade \ --old-datadir=/var/lib/postgresql/12/main \ --new-datadir=/var/lib/postgresql/16/main \ --old-bindir=/usr/lib/postgresql/12/bin \ --new-bindir=/usr/lib/postgresql/16/bin \ --old-options '-c config_file=/etc/postgresql/12/main/postgresql.conf' \ --new-options '-c config_file=/etc/postgresql/16/main/postgresql.conf'或者先切换到postgres用户再执行:
sudo su - postgres # 然后执行上述pg_upgrade命令修正配置文件路径
将命令中--old-options的配置路径改为PostgreSQL 12对应的文件,--new-options改为16版本的配置文件,确保版本与路径一一匹配。提前校验目录权限(可选)
检查目标目录权限是否正确:ls -ld /var/lib/postgresql/16/main输出需显示所有者为
postgres:postgres,若不是则执行:sudo chown -R postgres:postgres /var/lib/postgresql/16/main
额外注意事项
- 执行升级前,务必停止新旧版本的PostgreSQL服务:
sudo systemctl stop postgresql@12-main sudo systemctl stop postgresql@16-main - 升级完成后,同步
postgresql.conf和pg_hba.conf中的配置(如端口、连接权限),再启动新版本服务:sudo systemctl start postgresql@16-main
内容的提问来源于stack exchange,提问作者NeophyteLou
相关产品推荐
相关产品推荐

