psql: 致命错误:角色“postgres”不存在。

709

我是一个PostgreSQL的新手。

我在Mac上安装了postgres.app。我正在尝试使用psql命令,结果意外删除了postgres数据库,但我不知道里面有什么内容。

我正在学习一个教程:http://www.rosslaird.com/blog/building-a-project-with-mezzanine/,但我卡在了sudo -u postgres psql postgres这一步。

错误信息:psql: FATAL: role "postgres" does not exist

$ which psql

/Applications/Postgres.app/Contents/MacOS/bin/psql

这是在 psql -l 命令中打印的内容。

                                List of databases
    Name    |   Owner    | Encoding | Collate | Ctype |     Access privileges     
------------+------------+----------+---------+-------+---------------------------
 user       | user       | UTF8     | en_US   | en_US | 
 template0  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
 template1  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
(3 rows)

那么我应该采取哪些步骤?删除与psql相关的所有内容并重新安装一遍吗?

感谢大家的帮助!


2
重新启动计算机。确保执行来自brew services start postresql的Launchd。 - Michael Dimmitt
5
Postgresapp使用您计算机的登录用户名而不是postgres。您可以通过在终端中键入“whoami”来查找您的用户名。请使用此用户名进行登录。 - duykhoa
在使用brew安装时,它还会使用您计算机的登录用户名而不是postgres。因此,在终端上只需使用您的用户名登录,或者在通过pgAdmin4建立连接时使用。谢谢@duykhoa - sheerazabbas
35个回答

650

注意:如果您使用homebrew安装了postgres,请查看下面@user3402754的评论。

请注意,错误消息并没有提到缺少数据库,而是提到缺少角色。在登录过程的后续步骤中,它可能也会因缺少数据库而失败。

但首先要检查缺失的角色:命令\dupsql中的输出是什么?在我的Ubuntu系统上,相关行看起来像这样:

                              List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}        
如果没有至少一个拥有superuser角色的用户,那么你会遇到问题 :-)
如果有至少一个,你可以使用它来登录。查看您的\l命令输出:在template0template1数据库上,user的权限与我的Ubuntu系统上postgres超级用户相同。因此,我认为您的设置简单地将user作为超级用户。所以你可以尝试使用这个命令登录:
sudo -u user psql user

如果user确实是数据库超级用户,您可以为他创建另一个数据库超级用户和一个私有的、空的数据库:

CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;

但是由于您的postgres.app设置似乎没有这样做,因此您也不应该这样做。只需简单地适应教程即可。


14
对我而言,无法创建用户 - 相反使用以下命令可以成功创建用户 CREATE USER postgres WITH SUPERUSER PASSWORD 'password'; 我正在使用的是 PostgreSQL v10。 - arcseldon
570
如果您是从 homebrew 安装了 Postgres,那么您需要在终端中运行 /usr/local/opt/postgres/bin/createuser -s postgres - user3402754
26
我必须运行 /usr/local/opt/postgresql/bin/createuser -s postgres - user1807782
23
如果您正在使用特定版本的Postgres,则需要在路径中包含版本号——/usr/local/opt/postgresql@11/bin/createuser -s postgres - Digitrance
117
适用于M1芯片的Mac电脑:/opt/homebrew/bin/createuser -s postgres - originalhat
显示剩余4条评论

338

对于MAC系统:

  1. 安装Homebrew
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres 或者 /usr/local/opt/postgres/bin/createuser -s postgres,后者会使用最新版本。
  5. 手动启动postgres服务器: pg_ctl -D /usr/local/var/postgres start

开机启动PostgreSQL服务器

  • mkdir -p ~/Library/LaunchAgents
  • ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
  • launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

现在,已经设置好了,在终端中使用psql -U postgres -h localhost进行登录或使用PgAdmin进行GUI操作。

默认情况下,用户postgres没有登录密码。

查看此网站获取更多类似的文章:https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7


7
使用最新的brew安装后,您可以运行brew services start postgresql来启动PostgreSQL。 - Automatico
1
第四步可以是/usr/local/opt/postgresql@<version>/bin/createuser -s postgres - varontron
第三步出现了“权限被拒绝”的错误。 - Stewart

293

关键是:“我已经在Mac上安装了postgres.app。” 这个应用程序会使用与您的登录(短)名称相同的数据库超级用户角色名设置本地PostgreSQL安装。

当Postgres.app首次启动时,它会创建$USER数据库,这是psql默认数据库,如果未指定,则为该数据库。默认用户为$USER,没有密码。

一些脚本(例如,在Linux系统上使用pgdump创建的数据库备份)和教程将假定超级用户具有传统的postgres角色名称。

您可以通过进行一次操作使您的本地安装看起来更加传统,并避免这些问题:

/Applications/Postgres.app/Contents/Versions/9.*/bin/createuser -s postgres

这将使那些FATAL: role "postgres" does not exist的错误消失。


140
如果您正在使用Homebrew提供的PostgreSQL,则需要运行/usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres命令来创建一个超级用户(版本号为9.2.4)。 - Roger Lipscombe
1
对于Postgres.app 9.3,它们似乎重新排列了目录。我尝试了:/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres,但是这生成了相同的错误消息:“createuser:无法连接到数据库postgres:FATAL:角色“postgres”不存在”。 - Michael Coxon
8
"/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres" 对我来说运行正常。 - cjspurgeon
15
如果你在安装后运行了 brew link postgresql,那么在使用 createuser 命令时就不需要添加整个路径了,只需使用简单的命令 createuser -s postgres 即可。 - AlessioX
6
createuser -s postgres 对我有用。我使用Homebrew安装了postgres。 - biniam
显示剩余7条评论

136

如果您在2023年来到这里,并想知道最新的Postgres在最新的macOS(macOS Monterey)上可以使用哪些功能,请按照以下步骤操作:

brew install postgresql
createuser -s postgres
brew services restart postgresql

注意:如果您正在使用Docker化的实例,请确保首先设置变量,以便您可以连接到该实例:export PGUSER="youruser" export PGHOST="127.0.0.1" export PGPASSWORD="yourpassword。
感谢@NicolasZ关于Docker化实例的评论。

5
在 Monterey 上运行得非常好。 - Gilson Viana
2
谢谢!我卸载了Postgres,然后按照你说的做了,它起作用了! - Ahmet KAYGISIZ
1
非常感谢!我今天刚升级到了Mac OS v13 Ventura,但我的Postgres停止工作了。我不得不通过brew卸载并重新安装它(升级似乎不够),并按照您的建议进行操作。其他答案中提到的/usr/local/opt/postgres/bin/createuser -s postgres命令也无法使用。 - charint
1
如果您正在使用Docker化的实例,请确保首先设置变量,以便您可以连接到该实例: export PGUSER="youruser" export PGHOST="127.0.0.1" export PGPASSWORD="yourpassword" - NicolasZ
非常感谢!效果非常好。酿造说明应该明确指出这一点。 - undefined

94
createuser postgres --interactive

或者只需使用以下命令创建一个超级用户postgresl:

createuser postgres -s

很酷 https://dev59.com/fGMm5IYBdhLWcg3wZ-bQ#46951367 - unom
当我的pgadmin一直要求postgres用户而我一开始没有postgres角色时,我发现这个答案很有用,这个命令创建了它,我将自动生成的密码添加到我的pgadmin中,问题解决了! - theusual
这对我有效..但是这样做: "创建用户postgres" - Roberto Rodriguez

60

如果您在没有使用--username=postgres-U postgres指定postgres用户名的情况下,使用不是postgres用户ID的用户运行initdb,就会发生这种情况。

然后,数据库群集将使用您用于运行initdb的系统用户帐户创建,并被授予超级用户权限。

要解决此问题,只需使用Postgres中附带的createuser实用程序创建一个名为postgres的新用户,并使用--superuser选项。该实用程序可以在Postgres的bin目录中找到。例如:

createuser --superuser postgres

如果您使用自定义的主机名或端口,请确保设置适当的选项

不要忘记删除由initdb为您创建的其他用户帐户。


2
这正是我正在寻找的确切解释!谢谢。 - Nitin Nain

48
如果您使用brew安装了postgres,请在终端中运行以下命令:
/usr/local/opt/postgres/bin/createuser -s postgres

1
正是我所寻找的。 - Tvaroh
谢谢您的帮助。在我设置pgAdmin 4服务器时,这对我很有用。 - iarobinson
对我来说,路径是不同的/opt/homebrew/opt/postgresql@14/bin/createuser -s postgres - sh6210

24

首先,您需要创建一个用户:

sudo -u postgres createuser --superuser $USER

在创建数据库之后

sudo -u postgres createdb $USER

更改 $USER 为您的系统用户名。

您可以在这里查看完整解决方案。


我一直收到这个错误:错误:连接到套接字“/tmp/.s.PGSQL.5432”的服务器失败:致命错误:角色“jose.mateus”不存在。以上方法都对我没用,如果你也遇到了同样的错误,这个选项可以帮助你。 - José Mateus

22

我需要取消设置$PGUSER

$ unset PGUSER
$ createuser -s postgres

18

如果您从Brew安装了postgres并且正在使用Apple Silicon (M1) mac,请在终端中运行以下命令:

/opt/homebrew/opt/postgresql/bin/createuser -s postgres

如果您使用的是英特尔(x86)Mac,请在终端中运行以下命令:

/usr/local/opt/postgres/bin/createuser -s postgres

/usr/local/opt/postgresql@14/bin/createuser -s postgres 用于创建 PostgreSQL 14 的超级用户。 - StevenTsooo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接