You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

CentOS 7下普通用户创建PostgreSQL数据库集群遇权限问题求助

解决CentOS 7下PostgreSQL 10.1 initdb权限拒绝问题

别担心,这个问题我之前帮不少用户排查过,核心原因是PostgreSQL的数据库集群目录需要由专用的postgres系统用户来操作——哪怕你的普通用户在sudoers或wheel组,直接执行initdb也会因为目录所有权/权限限制报错。下面是具体的解决步骤:

  • 切换到postgres系统用户:
    直接用这条命令切换到postgres的专属环境,比sudo su postgres更稳妥:

    sudo -i -u postgres
    
  • 检查并修复目录权限(如果需要):
    如果/var/lib/pgsql/10/data目录已经存在,先确认它的所有权是否属于postgres:

    ls -ld /var/lib/pgsql/10/data
    

    如果显示的所有者不是postgres:postgres,就执行下面的命令修复:

    sudo chown -R postgres:postgres /var/lib/pgsql/10
    

    要是目录还不存在,先创建它再设置权限:

    sudo mkdir -p /var/lib/pgsql/10/data
    sudo chown -R postgres:postgres /var/lib/pgsql/10
    
  • 执行initdb创建数据库集群:
    现在你已经在postgres用户的环境下了,直接执行命令即可:

    initdb -D /var/lib/pgsql/10/data
    

额外提醒

如果之前你用普通用户尝试过执行initdb,可能已经在/var/lib/pgsql/10/data里留下了一些权限错误的文件,建议先清空目录再操作:

sudo rm -rf /var/lib/pgsql/10/data/*

另外,别用sudo initdb直接执行——虽然sudo能提升权限,但执行时的环境变量还是普通用户的,后续PostgreSQL服务启动时会因为目录所有权不匹配出问题,一定要切换到postgres用户操作才是标准流程。

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

火山引擎 最新活动