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

如何解决Ubuntu Focal WSL中PostgreSQL升级的权限拒绝问题?

解决PostgreSQL升级时的权限错误问题

问题核心原因

出现Permission denied是因为/var/lib/postgresql/16/main目录默认归postgres用户所有,普通用户或root直接执行命令没有写入权限;另外你命令里的配置文件路径也存在错误——你升级的是PostgreSQL 12到16,但--old-options里写的是10版本的配置文件,这会引发额外问题。

修复步骤

  1. 以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命令
    
  2. 修正配置文件路径
    将命令中--old-options的配置路径改为PostgreSQL 12对应的文件,--new-options改为16版本的配置文件,确保版本与路径一一匹配。

  3. 提前校验目录权限(可选)
    检查目标目录权限是否正确:

    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 15:30:10