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

h9u*_*est 652 authentication postgresql

我正在设置我的PostgreSQL 9.1.我对PostgreSQL无能为力:不能createdb,不能createuser; 所有操作都返回错误消息

Fatal: role h9uest does not exist
Run Code Online (Sandbox Code Playgroud)

h9uest是我的帐户名,我sudo apt-get install在这个帐户下的PostgreSQL 9.1.
root帐户仍然存在类似的错误.

Erw*_*ter 714

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

sudo -u postgres -i
Run Code Online (Sandbox Code Playgroud)

这里这里推荐.

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

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

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

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

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

阅读手册中的数据库角色客户端身份验证.

  • `sudo -u postgres` 不起作用,而 `sudo -u postgres -i` 起作用!`-i` 标志有什么作用? (4认同)
  • 根据配置的不同,可能只需要“su postgres”。 (3认同)
  • @parsecer:启动一个交互式 shell,类似于“su”,但基于 sudo 权限。请参阅“man sudo”。 (2认同)

dre*_*ees 267

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

/sf/answers/1188193821/

总之,跑步

sudo -u postgres createuser owning_user
Run Code Online (Sandbox Code Playgroud)

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

  • 如果在此之后出现"权限不足"错误,则可以将-s标志附加到上述命令.这将以超级用户身份创建新用户.如果您决定这样做,请注意这一点的安全隐患. (26认同)
  • 得到错误:`sudo:unknown user:postgres` (4认同)
  • @ConnorLeech你可以用PG超级用户的名字替换'postgres'.就我而言,这是我的名字. (4认同)
  • `psql:致命:角色“jonny”不存在`好吧`sudo -u postgres -s createuser jonny`那么为什么`createuser:创建新角色失败:错误:角色“jonny”已经存在` (3认同)

小智 123

sudo su - postgres

psql template1
Run Code Online (Sandbox Code Playgroud)

在pgsql上创建角色,权限为"超级用户"

CREATE ROLE username superuser;
eg. CREATE ROLE demo superuser;
Run Code Online (Sandbox Code Playgroud)

然后创建用户

CREATE USER username; 
eg. CREATE USER demo;
Run Code Online (Sandbox Code Playgroud)

为用户分配权限

GRANT ROOT TO username;
Run Code Online (Sandbox Code Playgroud)

然后启用登录该用户,这样你就可以运行eg:,psql template1从普通$终端:

ALTER ROLE username WITH LOGIN;
Run Code Online (Sandbox Code Playgroud)

  • #GRANT ROOT给我; 错误:角色"root"不存在 (24认同)
  • 更简单的版本:```sudo -u postgres createuser --superuser $ USER; sudo -u postgres createdb $ USER``` (5认同)
  • 我刚刚安装了PostgreSQL 9.4.4,并且能够使用以下命令创建一个新的超级用户:````CREATE ROLE用户名超级用户createdb login;```它结合了所有三个步骤...... (4认同)
  • @shacker`#GRANT postgres TO用户名` (2认同)

Mil*_*son 80

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

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

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

  • 我需要将第二部分运行为:`sudo -u postgres createdb $(whoami)` (2认同)
  • @SanD如果您已经以超级用户身份创建了自己的用户帐户(通过第一个命令中的-s标志),则可以自己创建数据库。您无需将`createdb`作为`postgres`运行。 (2认同)
  • 很好的答案!节省了我几个小时的调试时间! (2认同)

小智 67

这对我有用:

psql -h localhost -U postgres
Run Code Online (Sandbox Code Playgroud)

  • `postgres 角色不存在` (4认同)
  • @Vincent 如果 PostgreSQL 安装后密码从未更改,默认情况下它是 `postgres`(在 Linux 和 Windows 上测试)。 (2认同)
  • 要访问特定数据库,您需要指定数据库名称``psql -h主机名-U用户名-d数据库名称``` (2认同)

Jan*_*Jan 24

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

healthcheck:
  test: ['CMD-SHELL', 'pg_isready']
  interval: 5s
  timeout: 5s
  retries: 5
Run Code Online (Sandbox Code Playgroud)

如果您也有更改用户:

healthcheck:
  test: ['CMD-SHELL', 'pg_isready -U postgres'] # <<<---
  interval: 5s
  timeout: 5s
  retries: 5
Run Code Online (Sandbox Code Playgroud)


Moh*_*med 12

工作方法,

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

  4. 现在试试, psql -U postgres

  • 显然,“信任”方法仅在完全安全的环境中才可取。虽然可以从不受信任的连接进行访问,但*永远不要*像这样公开您的数据库集群。 (2认同)

Kal*_*aaz 8

对于Postgres 9.5版本,请 使用以下命令:

psql -h localhost -U postgres
Run Code Online (Sandbox Code Playgroud)

希望这会有所帮助。


And*_*toy 7

对于Windows用户:psql -U postgres

您应该会看到 PostgreSQL 的命令行界面: postgres=#


小智 6

在本地用户提示符下,不是root用户提示符,键入

sudo -u postgres createuser <local username>
Run Code Online (Sandbox Code Playgroud)

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

然后输入生成"角色'用户名'不存在的上一个命令."

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


Hen*_*nry 6

我在macOS上安装它并且必须:

cd /Applications/Postgres.app/Contents/Versions/9.5/bin
createuser -U postgres -s YOURUSERNAME
createdb YOURUSERNAME
Run Code Online (Sandbox Code Playgroud)

以下是来源:https://github.com/PostgresApp/PostgresApp/issues/313#issuecomment-192461641


Nat*_*cha 5

在我的例子中,手动创建数据库集群解决了这个问题。

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

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

初始化数据库

通常,将 postgres 安装到操作系统会创建一个“初始数据库”并启动运行的 postgres 服务器守护进程。如果没有,那么您需要运行 initdb


Abe*_*bel 5

psql postgres

postgres=# CREATE ROLE username superuser;
postgres=# ALTER ROLE username WITH LOGIN;
Run Code Online (Sandbox Code Playgroud)

  • `psql postgres -U postgres`?取决于您拥有的用户 (-U)。 (4认同)
  • psql postgres结果:psql:致命:角色“根”不存在。 (2认同)