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个回答

4
今天我遇到了类似的问题,实际上我不确定用户名是什么。这里有两件事情:如果您在企业中,并且没有系统管理员访问权限,则 postgres 将创建您的企业用户名作为 postgres 管理员用户名。如果您通过 Homebrew 安装,则肯定会发生这种情况。在这种情况下,只需使用 brew 运行您的 psql 服务并回显用户名: brew services start postgresql echo $USER 您将看到您的 postgres 用户的用户名。

该死,这真的起作用了。谢谢。 - Ketan Patil
这对我在 M1 MacBook 上也起作用了... postgres 用户是我登录帐户的用户名。 - Joshua W

3

在Mac上执行以下操作:

createuser -s postgres

在终端上工作。

2

在使用Homebrew安装了新的Mac(M1)和最新的Postgres(14.0)后,我遇到了这个问题,但只需重新安装Postgres即可解决:

brew services stop postgresql
rm -rf /opt/homebrew/var/postgres/*
brew reinstall postgresql
initdb --locale=C -E UTF-8 /opt/homebrew/var/postgres
brew services restart postgresql

所以,这是一种奇迹或者像那样的东西...

然后只需:

psql -d postgres

顺便说一下,我之前安装了Postgres,但已经有两周没用了,可能是个bug或其他问题,反正现在好了,我也不知道为什么,总之它能正常工作。 - stefanitsky
你不应该使用那个,因为你会安装一个随机版本的PostgreSQL(很可能是在brew上最新可用的版本)。 - Dimitri Kopriwa

2

打开您的终端。确保您已经退出postgres shell并且postgresql正在终端中运行。 现在在您的终端中运行以下命令:

createuser -s postgres


2
如果您是MAC(M1)用户,并使用HomeBrew安装了Postgres,则按照以下步骤操作:
  1. 使用which psql命令检查您的Postgres位置。
  2. 如果第一个命令的输出为/opt/homebrew/bin/psql,则运行命令/opt/homebrew/bin/createuser -s postgres
这个方法的想法是使用Postgres的安装位置创建一个名为“postgres”的用户。因此,您可能需要根据您的Postgres位置更改命令。

2

背景

我正在为一个我在这里没有看到的案例添加答案,这是一个边缘情况,如果您在同一台机器上有多个用户,并且尝试使用postgres服务的用户不是安装postgres的用户。

我尝试过的方法

除了其他类似的命令之外,对于我来说,所有这些命令都失败了:

createuser -s [your username]
# createuser: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL:  role "[your username]" does not exist

createuser -s postgres
# createuser: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL:  role "[your username]" does not exist

sudo -u postgres createuser --superuser [your username]
# sudo: unknown user: postgres
# sudo: error initializing audit plugin sudoers_audit

psql -U postgres
# psql: error: connection to server on socket "/tmp/.s.PGSQL.5432" failed: FATAL:  role "postgres" does not exist

原因

原因是因为postgres角色和[你的用户名](即命令行中的whoami)都不在postgres中。

解决方案

在这种边缘情况下,我必须首先使用安装了Postgres的用户登录:

sudo su - [username that installed postgres]

然后为我的新用户创建一个角色:

createuser -s [your username]

2

如果您在运行docker容器后遇到此问题,请尝试销毁容器并重新创建它。这对我有用:

docker-compose down
docker-compose up --force-recreate

这将使用postgresuser作为默认用户重新创建数据库。


2
在我的情况下,我只需要在我恢复的数据库中创建那个用户。
CREATE ROLE postgres;
GRANT ALL PRIVILEGES ON DATABASE database_name TO postgres;

1
在Ubuntu系统上,我清除了PostgreSQL并重新安装了它。所有数据库都已恢复。 这解决了我的问题。
建议-为了更安全起见,请备份数据库。

1

对于m1芯片和homebrew 3.4.9版本,createuser已经移动到特定软件包的Cellar中。 以下命令适用于我: /opt/homebrew/Cellar/postgresql@12/12.10_1/bin/createuser -s postgres


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