PostgreSQL错误:致命错误:角色“用户名”不存在。

1045

我正在设置我的PostgreSQL 9.1。我无法使用PostgreSQL做任何事情:不能创建数据库,不能创建用户,所有操作都返回错误消息。

我正在配置PostgreSQL 9.1,但无法执行创建数据库或创建用户等任何操作,所有操作都返回错误消息。

Fatal: role h9uest does not exist

h9uest 是我的账户名,在这个账户下我使用 sudo apt-get install 安装了 PostgreSQL 9.1。
root 账户出现了类似的错误。


2
之后你可能会遇到FATAL: role "user" is not permitted to log in的问题,请参考http://dba.stackexchange.com/questions/57723/superuser-is-not-permitted-to-login。 - the
32
我在这里回答了这个问题:https://dev59.com/VWUp5IYBdhLWcg3wY29V#31712520。同时也请阅读这篇教程:“如何在Ubuntu Linux上安装Postgres”。 - ruzenhack
1
@Ruzenhack 那个教程链接正是我所需要的!非常清晰简单。 - dwanderson
9
使用以下命令登录本地PostgreSQL数据库:psql -h localhost -U postgres。 - Metin Atalay
1
如果你遇到了 role doesn't existcan't create role, it already exists 的错误,请查看这个答案:https://dev59.com/T6Dia4cB1Zd3GeqPH7Ni#56658832 - Jonathan
显示剩余2条评论
19个回答

1057

使用操作系统用户postgres创建您的数据库 - 只要您没有设置与同名操作系统用户相对应的具有必要特权的数据库角色(在您的情况下为h9uest):

sudo -u postgres -i

按照建议这里这里

然后再试一次。作为系统用户postgres操作完毕后,输入exit退出。

或者dsrees在另一个答案中演示的那样,以sudo身份执行单个命令createuser,并将其作为postgres运行。

关键是使用与数据库角色同名的操作系统用户,通过ident认证授予访问权限。postgres是初始化数据库群集的默认操作系统用户。手册:

为了引导数据库系统,一个新初始化的系统总是包含一个预定义的角色。这个角色总是一个“超级用户”,默认情况下(除非在运行initdb时更改),它将与初始化数据库集群的操作系统用户具有相同的名称。通常,这个角色将被命名为postgres。为了创建更多的角色,你首先必须连接到这个初始角色。
我听说过一些奇怪的设置,比如非标准的用户名或操作系统用户不存在。你需要根据实际情况调整你的策略。
在手册中阅读关于数据库角色客户端身份验证的内容。

1
无法以用户postgres身份运行sudo etc...如何安装程序?请参见此S2geometry安装问题 - Peter Krauss
3
根据配置情况,可能只需要使用命令"su postgres"。 - Fabien Snauwaert
6
sudo -u postgres 不起作用,而 sudo -u postgres -i 起作用! -i 标志是什么意思? - parsecer
2
@parsecer:启动了一个交互式shell,类似于su,但基于sudo权限。请参阅man sudo - Erwin Brandstetter
在Postgres 12中,我必须将“-u”更改为“-U”,并且我收到“无效选项--'i'”。 - Code-Apprentice
在 Mac 上从备份文件还原全局角色和权限时,我遇到了“postgres 用户不存在”的问题。我发现我可以只指定我的 Mac 系统用户,即 psql -U <mac_user> -d template1 -f <globals/backup/file>。这种方法有什么问题吗?在执行此操作后,数据库角色包括我的常规系统用户名(以及一个 postgres 用户);我不知道这是否存在安全风险。 - John

350

在尝试了许多其他人的解决方案都没有成功后,这个答案最终帮助了我。

https://dev59.com/QWQn5IYBdhLWcg3wRVRs#16974197

简而言之,运行

sudo -u postgres createuser owning_user

创建一个名为 owning_user(在本例中为 h9uest)的角色。然后,您可以在设置了任何帐户名称的终端下运行 rake db:create,而无需进入 Postgres 环境。


35
如果你在此之后遇到“权限不足”的错误,你可以在上述命令中添加-s标志。这将创建一个超级用户作为你的新用户。请注意,如果你决定这样做,要意识到安全方面的影响。 - Kabir Sarin
1
我收到了“权限不足”的提示,但现在我收到了错误:卷“用户名”已经存在。 - Wylliam Judd
5
你可以用你的PG超级用户的名称替换掉“postgres”。在我的情况下,它是我的名字。 - myfashionhub
1
我也需要使用 -s,并且不需要使用 sudo -u postgres(只需使用 createuser new_user 即可正常工作)。 - Meekohi
3
好的,该翻译为:psql: FATAL: role "jonny" does not exist 表示:在执行 psql 命令时,指定的数据库角色 "jonny" 不存在。然后执行 sudo -u postgres -s createuser jonny 命令,为什么会出现以下错误:createuser: creation of new role failed: ERROR: role "jonny" already exists这是因为 "jonny" 这个角色已经存在于数据库中,无法再次创建。 - Jonathan
显示剩余4条评论

175
sudo su - postgres

psql template1

创建一个具有 "superuser" 权限的 pgsql 角色。

CREATE ROLE username superuser;
eg. CREATE ROLE demo superuser;

然后创建用户

CREATE USER username; 
eg. CREATE USER demo;

给用户分配权限

GRANT ROOT TO username;

接下来启用该用户的登录功能,这样您就可以从普通的$终端运行例如:psql template1

ALTER ROLE username WITH LOGIN;

4
我刚刚安装了PostgreSQL 9.4.4,并成功使用以下命令创建了新的超级用户:CREATE ROLE username superuser createdb login;这个命令将三个步骤合并在一起... - iPad Guy
37
授权给我ROOT权限; 错误:角色"root"不存在。 - shacker
9
更简单的版本:sudo -u postgres createdb $USER``` 翻译为: ```使用超级用户postgres创建一个与当前用户名相同的新用户,并将其设置为超级用户; 使用超级用户postgres创建一个与当前用户名相同的数据库。``` - Zach Estela
3
#GRANT postgres TO username 翻译成中文为:授予用户名对postgres的权限。 - 7kemZmani
我正在使用root启动服务器,然后执行psql -U postgres -h 127.0.0.1 --command "CREATE USER postgresondocker WITH SUPERUSER PASSWORD 'postgresondocker';" &&\ createdb -O postgresondocker postgresondocker。如果我将其添加到pg_ident中,我可以使用root来执行此操作吗? - Shivangi Singh

141

这对我有用:

psql -h localhost -U postgres

请为上述用户添加密码。 - StealthTrails
2
@Vincent 如果在 PostgreSQL 安装后从未更改过密码,则默认密码为 postgres(在 Linux 和 Windows 上测试过)。 - silvioprog
6
"role postgres does not exist" 的意思是 “角色postgres不存在”。 - J-Cake
2
要访问特定的数据库,您需要指定数据库名称: psql -h 主机名 -U 用户名 -d 数据库名称 - toel

117

使用apt-get安装postgres不会创建用户角色或数据库。

要为您的个人用户帐户创建超级用户角色和数据库:

sudo -u postgres createuser -s $(whoami); createdb $(whoami)


3
我需要运行第二部分代码: sudo -u postgres createdb $(whoami) - SanD
2
@SanD 如果您已经通过第一个命令中的 -s 标志创建了自己的超级用户帐户,则可以使用自己的身份创建数据库。您不需要以 postgres 的身份运行 createdb - Miles Erickson

40
psql postgres

postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;

9
psql postgres 的结果为: psql: FATAL: 角色 "root" 不存在。 - TomSawyer
5
psql postgres -U postgres?根据你拥有的用户(-U)而定。 - Meadowlark Bradsher
谢谢!我很苦恼如何在root下备份PostgreSQL,因为我不知道它的密码。 - Dika
我遇到一个错误,提示“必须是超级用户才能创建超级用户”。 - Naveed Hasan

23

我使用docker-compose进行了健康检查。

healthcheck:
  test: ['CMD-SHELL', 'pg_isready']
  interval: 5s
  timeout: 5s
  retries: 5
如果您也有更改用户的需求:
healthcheck:
  test: ['CMD-SHELL', 'pg_isready -U postgres'] # <<<---
  interval: 5s
  timeout: 5s
  retries: 5

23

对于版本为Postgres 9.5的情况,请使用以下命令:

psql -h localhost -U postgres

希望这能有所帮助。


19

工作方法,

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer 在此处将peer更改为trust
  3. 重启,sudo service postgresql restart

  4. 现在尝试,psql -U postgres


2
显而易见的是,trust方法仅在完全安全的环境中才可行。虽然来自不受信任的连接的访问是可能的,但决不要像那样公开您的DB集群。 - Erwin Brandstetter
请检查:如果postgresql服务没有启动,可能是文件“pg_hba.conf”中出现了一些错误。 - Walk

11

对于Windows用户: psql -U postgres

此时您应该可以看到PostgreSQL的命令行界面:postgres=#


谢谢,这个在Windows上对我有效。 - Kidus Tekeste

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