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




