Mac使用Homebrew安装PostgreSQL 执行命令均报postgres角色不存在
Homebrew安装PostgreSQL提示
role "postgres" does not exist实操解决步骤 核心原因说明
Homebrew安装PostgreSQL完成后,初始化数据库集群的逻辑和EDB官方安装包完全不同:
- EDB安装包会自动创建名为
postgres的超级登录角色,同时初始化同名的postgres数据库。之前用EDB安装包时,在命令末尾连续输入两次postgres就能正常访问,本质是因为命令格式里第一个postgres是指定的登录用户名(对应-U参数后面的值),第二个postgres是指定连接的数据库名,这个逻辑能跑通完全是因为EDB预置了这个角色。 - Homebrew版本初始化时,会直接把当前执行安装操作的Mac登录用户名设为数据库超级用户,不会自动创建
postgres角色,这就是所有命令都报角色不存在的根本原因。
很多用户会尝试在Mac系统里新建postgres本地用户来解决问题,这个操作完全不触碰数据库集群内部的角色表,从原理上就不可能解决数据库内部缺角色的报错。
分步操作流程
- 先确认对应版本的PostgreSQL服务正常运行
- 执行
brew services list查看postgresql@13的运行状态,状态为started即为正常 - 如果没启动,执行
brew services start postgresql@13启动服务
- 执行
- 用Homebrew默认授权的当前系统用户身份直连数据库,绕开“角色不存在”的前置报错
- 直接执行命令:
psql postgres - 这一步就是解决“找不到不触发报错的创建命令”的核心:只要在连接时指定
-U postgres,就必然会触发角色不存在的报错,必须用系统默认的授权用户连进去,才能执行创建角色的操作。
- 直接执行命令:
- 在psql交互界面内手动创建缺失的
postgres超级角色
执行如下SQL命令,配置完整的超级权限:CREATE ROLE postgres WITH SUPERUSER CREATEDB CREATEROLE LOGIN PASSWORD '自定义登录密码'; - 验证角色创建结果
- 在psql界面执行
\du,列表中能看到postgres角色且标记为超级用户,即为创建成功 - 执行
\q退出psql交互界面,后续所有PG相关命令都可以正常调用postgres用户执行
- 在psql界面执行
多版本共存场景的排查要点
如果执行psql postgres还是提示角色不存在,说明当前连接到的是之前安装的11/12版本的旧数据库集群,不是新装的13版本:
- 先停掉所有旧版本的PostgreSQL服务,释放5432默认端口
- 确认新装版本的数据库集群初始化路径:Apple芯片Mac默认是
/opt/homebrew/var/postgresql@13,Intel芯片Mac默认是/usr/local/var/postgresql@13 - 启动新装版本的服务后再重复上述连接、创建角色的流程
- 日常使用时注意把对应版本的bin路径加到环境变量最前面,避免系统调用到旧版本的
psql、createdb、createuser等二进制文件
内容的提问来源于stack exchange,提问作者Sheri Tibbs
相关产品推荐
相关产品推荐

