macOS Big Sur安装PostgreSQL 13.3报错:initdb初始化数据库集群失败
macOS Big Sur 下 EDB PostgreSQL 安装 initcluster.sh 执行失败解决方案
你排查的原因完全正确,macOS Big Sur 及以上版本中,系统创建的服务类账户默认禁用交互式登录权限,
su -命令需要加载目标用户的登录shell,因此会执行失败,使用不需要登录shell的sudo -u替代是完全正确的修复方向。
方案一:修改安装脚本完成一次性安装
- 安装程序报出失败提示时,先不要关闭安装向导,保持报错状态
- 打开终端,切换到 root 权限:
sudo su - 备份原脚本文件避免操作失误:
cp /Library/PostgreSQL/13/installer/server/initcluster.sh /Library/PostgreSQL/13/installer/server/initcluster.sh.bak
- 编辑
initcluster.sh文件,将你定位到的su - $OSUSERNAME -c "..."这行代码,替换为以下内容:
sudo -u $OSUSERNAME "$INSTALLDIR/bin/initdb --pwfile $INSTALLDIR/installer/server/initdbpw.$$ --encoding=utf8 -A scram-sha-256 -U \"$SUPERNAME\" -D \"$DATADIR\""
- 保存修改后回到安装向导,点击「重试」即可继续完成剩余安装流程
方案二:手动初始化集群(适用于已关闭安装向导的场景)
如果已经退出了安装程序,无需重新运行安装包,手动执行初始化操作即可:
- 执行命令手动初始化数据库集群(以 PostgreSQL 13 版本为例,其他版本替换对应版本号即可):
sudo -u postgres /Library/PostgreSQL/13/bin/initdb --encoding=utf8 -A scram-sha-256 -U postgres -D /Library/PostgreSQL/13/data
- 初始化过程中会提示设置超级管理员密码,按照提示输入即可
- 初始化完成后手动启动 PostgreSQL 服务:
sudo -u postgres /Library/PostgreSQL/13/bin/pg_ctl -D /Library/PostgreSQL/13/data start
- 如需配置开机自启,加载官方提供的启动项配置即可:
sudo launchctl load /Library/LaunchDaemons/com.edb.launchd.postgresql-13.plist
注意事项
- 不要为 postgres 用户开启交互式登录权限,该账户为专用服务账户,开启登录权限会引入不必要的安全风险
- 该兼容性问题仅存在于 EDB 提供的 PostgreSQL 13 及更低版本的安装包中,14 及以上版本的官方安装包已经修复了该脚本问题
内容的提问来源于stack exchange,提问作者Yueming Xu
相关产品推荐
相关产品推荐

