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


731

我正在设置PostgreSQL 9.1。我不能对PostgreSQL做任何事情:不能createdb,不能createuser;不能。所有操作均返回错误消息

Fatal: role h9uest does not exist

h9uest是我的帐户名,我sudo apt-get install在该帐户下使用PostgreSQL 9.1。
root帐户仍然存在类似错误。


1
之后,您可能会遇到FATAL: role "user" is not permitted to log in,请查看dba.stackexchange.com/questions/57723/…
kqw

19
在这里回答了这个问题。也请阅读本教程“ 如何为Ubuntu Linux安装Postgres ”。
ruzenhack

@Ruzenhack该教程链接正是我所需要的!非常清晰和简单
dwanderson

4
psql -h localhost -U postgres
Metin Atalay

如果您收到错误role doesn't exist并且出现错误,can't create role, it already exists请查看以下答案:stackoverflow.com/a/56658832/1689770
Jonathan

Answers:


773

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

sudo -u postgres -i

按照这里这里的建议。

然后再试一次。键入exit时为系统用户操作完成postgres

执行单个命令createuserpostgressudo一样证明由徳雷斯的另一种回答。

关键是要使用与具有相同名称的数据库角色匹配的操作系统用户来通过ident身份验证授予访问权限。postgres是初始化数据库群集的默认操作系统用户。手册:

为了引导数据库系统,新初始化的系统始终包含一个预定义角色。该角色始终是“超级用户”,并且默认情况下(除非在运行时更改initdb),它的名称与初始化数据库集群的操作系统用户的名称相同。通常,此角色将命名为postgres。为了创建更多角色,您首先必须作为该初始角色进行连接。

我听说过使用非标准用户名或操作系统用户不存在的奇怪设置。您需要在那里调整策略。

在手册中阅读有关数据库角色客户端身份验证的信息。


1
无法以sudo etc用户postgres 身份运行。如何安装程序?请参阅此S2geometry安装问题
彼得·克劳斯

根据配置,可能只需要一个su postgres
法比恩·斯诺瓦特

1
sudo -u postgres不起作用,而sudo -u postgres -i有效!什么是-i标志吗?
parsecer

1
@parsecer:启动了一个交互式shell,类似于su,但是基于sudo特权。请参阅man sudo
Erwin Brandstetter

284

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

https://stackoverflow.com/a/16974197/2433309

简而言之,跑步

sudo -u postgres createuser owning_user

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


29
如果在此之后收到“权限不足”错误,则可以将-s标志附加到上述命令中。这会将您的新用户创建为超级用户。如果您决定这样做,请注意这样做的安全隐患。
2015年

1
我正在获得“权限不足”,但是现在出现错误:滚动“用户名”已经存在。
威廉·贾德

4
@ConnorLeech您可以用PG超级用户的名称替换“ postgres”。就我而言,这是我的名字。
myfashionhub 16/09/14

1
我也不得不使用-s,并且不需要使用sudo -u postgrescreateuser new_user效果很好)
Meekohi

2
psql: FATAL: role "jonny" does not exist好吧, sudo -u postgres -s createuser jonny那为什么 createuser: creation of new role failed: ERROR: role "jonny" already exists
乔纳森

134
sudo su - postgres

psql template1

在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

25
#给我根源; 错误:角色“根”不存在
黑客

6
更简单的版本: sudo -u postgres createuser --superuser $USER; sudo -u postgres createdb $USER
Zach Estela

2
@shacker#GRANT postgres TO username
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

85

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

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

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


1
我需要将第二部分作为以下内容运行:sudo -u postgres createdb $(whoami)
SanD

2
@SanD如果您已经以超级用户身份创建了自己的用户帐户(通过-s第一个命令中的标志),则可以自己创建数据库。你不会需要运行createdbpostgres
Miles Erickson,

2
好答案!节省了我几个小时的调试时间!
阿米奴卡诺(Aminu Kano)


15

工作方法

  1. vi /etc/postgresql/9.3/main/pg_hba.conf
  2. local all postgres peer 在这里将同行变成信任
  3. 重新开始, sudo service postgresql restart

  4. 现在尝试 psql -U postgres


1
很明显,trust仅在完全安全的环境中才建议使用此方法。尽管可以通过不受信任的连接进行访问,但切勿以这种方式公开数据库集群。
Erwin Brandstetter,

这个很好
horoyoi o 19/12/26

检查:如果未启动postgresql服务,则文件中可能存在一些错误pg_hba.conf


11
psql postgres

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

4
psql postgres结果:psql: FATAL: role "root" does not exist
TomSawyer

2
psql postgres -U postgres?取决于您拥有的用户(-U)。
Meadowlark Bradsher

谢谢!我不知道如何使用postgres密码来挣扎如何用root备份postgresql
Dika

7

在本地用户提示而不是root用户提示中,键入

sudo -u postgres createuser <local username>

然后输入本地用户的密码。

然后输入先前生成的命令“角色'username'不存在”。

以上步骤为我解决了问题。如果没有,请发送上述步骤的终端消息。



3

在我的情况下,手动创建数据库集群解决了该问题。

由于某种原因,当我安装postgres时,没有创建“初始数据库”。执行initdb对我有用。

PostgreSQL Wiki-第一步中提供了此解决方案:

初始化数据库

通常,将postgres安装到您的OS会创建一个“初始DB”并启动postgres服务器守护程序运行。如果没有,那么您将需要运行initdb



0

请按照下列步骤,它将为您工作:

  1. msfconsole
  2. 输入db_console
  3. 将会显示一些信息,您选择了告诉您进行以下操作的信息:db_connect user:pass@host:port.../database对不起,我不记得了,但是就像这样,然后用database.yml放置位置中包含的信息替换用户,密码以及主机和数据库:/usr/share/metasploit-framework/config
  4. 你会看见。在后台重建模型缓存。
  5. 键入apt-get更新&& apt-get升级,更新后重新启动终端和午餐msfconsole,它可以正常工作,您可以通过键入以下内容来检查msfconsole: msf>db_status是否已连接。

0

转储和带有--no-owner --no-privileges标志的还原

例如

转储- pg_dump --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname > /tmp/full.dump

恢复- pg_restore --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname /tmp/full.dump

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.