Createuser:无法连接到数据库 postgres:致命:角色“tom”不存在

Posted

技术标签:

【中文标题】Createuser:无法连接到数据库 postgres:致命:角色“tom”不存在【英文标题】:Createuser: could not connect to database postgres: FATAL: role "tom" does not exist 【发布时间】:2013-06-03 02:33:20 【问题描述】:

我第一次尝试设置 Postgres,我需要创建一个具有读取和创建数据库权限的用户。但是,当我使用时:

createuser username

在我的终端中,我收到以下消息:

createuser:无法连接到数据库 postgres:致命:角色“tom”不存在

Tom 是我现在登录的 Ubuntu 用户帐户。我正在尝试创建一个“postgres”的用户名,然后执行psql -U psql template1,这样我就可以创建一个数据库并为我的 Rails 应用程序分配一个所有者。

【问题讨论】:

您真的要创建一个“postgres”用户吗?还是只是 Rails 应用程序的用户?通常,“postgres”用户已经存在,问题只是连接到它以执行您需要的操作。 【参考方案1】:

你提到了 Ubuntu,所以我猜你是通过 apt 从 Ubuntu 安装 PostgreSQL 软件包的。

如果是这样,则 postgres PostgreSQL 用户帐户已经存在,并且配置为可通过 peer 身份验证访问 pg_hba.conf 中的 unix 套接字。您可以通过以postgres unix 用户身份运行命令来获得它,例如:

sudo -u postgres createuser owning_user
sudo -u postgres createdb -O owning_user dbname

这一切都在Ubuntu PostgreSQL 文档中,这是“Ubuntu PostgreSQL”的第一个 Google 热门文章,并包含在许多 Stack Overflow 问题中。

(您忽略了操作系统和您所使用的版本、您如何安装 PostgreSQL 等细节,让这个问题更难回答。)

【讨论】:

在创建 owning_user 之后,你如何与这个用户建立联系?我的意思是连接我使用的默认用户 sudo -u postgres psql postgres 。同样的方式如何连接owning_user? 三个选项。 (a) 为该用户设置密码并编辑pg_hba.conf 为该用户使用md5 auth(参见手册); (b) 创建同名操作系统用户并继续使用peer auth;或者 (c) 更高级,创建一个 pg_ident.conf 映射以允许您的操作系统用户以新用户身份登录。【参考方案2】:

See git gist with instructions here

运行这个:

 sudo -u postgres psql

psql -U postgres

在你的终端进入 postgres

注意:如果您使用的是 Mac 并且上述两个命令都失败,请跳转到下面关于 Mac 的部分

postgres=#

运行

CREATE USER new_username;

注意:将 new_username 替换为您要创建的用户,在您的情况下是 tom。

postgres=# CREATE USER new_username;
CREATE ROLE

由于您希望该用户能够创建数据库,因此您需要将角色更改为超级用户

postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE

确认一下,一切都成功了,

postgres=# \du
                         List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
new_username     | Superuser, Create DB                           | 
postgres         | Superuser, Create role, Create DB, Replication | 
root             | Superuser, Create role, Create DB              | 

postgres=# 

更新/修改(适用于 Mac):

我最近在我的 Mac 上遇到了类似的错误:

psql: FATAL: role "postgres" does not exist

这是因为我的安装是使用数据库超级用户设置的,其角色名称与您的登录(短)名称相同。

但一些 linux 脚本假定超级用户具有传统的角色名称 postgres

我是如何解决这个问题的?

如果你安装了homebrew 运行:

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

如果您使用的是特定版本的 postgres,请说 10.5 然后运行:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s postgres

或:

/usr/local/Cellar/postgresql/10.5/bin/createuser -s new_username

或者:

/usr/local/opt/postgresql@11/bin/createuser -s postgres

如果你安装了postgres.app for Mac 运行:

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

P.S:将 10.5 替换为您的 PostgreSQL 版本

【讨论】:

这有助于进入 postgres:psql -U postgres【参考方案3】:
sudo -u postgres createuser -s tom 

这应该会对您有所帮助,因为如果管理员没有为您创建 PostgreSQL 用户帐户,就会发生这种情况。也可能是为您分配的 PostgreSQL 用户名与您的操作系统用户名不同,在这种情况下,您需要使用 -U 开关。

【讨论】:

【参考方案4】:

1- 以默认 PostgreSQL 用户 (postgres) 登录

sudo -u postgres -i

2- 作为 postgres 用户。使用createuser 命令添加新的数据库用户

[postgres]$ createuser --interactive

3-退出

[postgres]$ exit

【讨论】:

【参考方案5】:

您的错误已发布在官方文档中。你可以read this article。

我已经从那篇文章中复制了你的原因(并超链接了 URL):

如果管理员没有为您创建 PostgreSQL 用户帐户,就会发生这种情况。 (PostgreSQL 用户帐户不同于操作系统用户帐户。)如果您是管理员,请参阅Chapter 20 以获取创建帐户的帮助。您需要成为安装 PostgreSQL 的操作系统用户(通常是 postgres)才能创建第一个用户帐户。也可能是您被分配了一个与您的操作系统用户名不同的 PostgreSQL 用户名;在这种情况下,您需要使用 -U 开关或设置 PGUSER 环境变量来指定您的 PostgreSQL 用户名

为了您的目的,您可以这样做:

1) 创建 PostgreSQL 用户帐户:

sudo -u postgres createuser tom -d -P

(-P 选项设置密码;-d 选项允许为您的用户名“tom”创建数据库。注意“tom”是您的操作系统用户名。这样,您可以执行 PostgreSQL没有sudoing 的命令。)

2) 现在您应该可以执行createdb 和其他 PostgreSQL 命令了。

【讨论】:

【参考方案6】:

我有同样的问题,我只是这样做

sudo su - postgres

createuser odoo -U postgres -dRSP #P 输入密码 (odoo用户名 您希望授予 postgres 访问权限)

【讨论】:

【参考方案7】:

在 Windows 上使用:

C:\PostgreSQL\pg10\bin>createuser -U postgres --pwprompt <USER>

酌情添加--superuser--createdb

更多选项请参见https://www.postgresql.org/docs/current/static/app-createuser.html

【讨论】:

【参考方案8】:

如果您不想更改身份验证方法 (ident) 并弄乱 pg_hba.conf,请使用:

以默认用户首次登录

 sudo su - postgres

然后访问 psql 并创建一个与您登录的用户同名的用户

postgres=# CREATE USER userOS WITH PASSWORD 'garbage' CREATEDB;

您可以使用相应的角色验证您的用户

postgres=#  \du

在此之后,您可以创建数据库并使用它进行验证

psql -d dbName
\l
\q

【讨论】:

【参考方案9】:

您需要先运行 initdb。它将创建数据库集群和初始设置

见How to configure postgresql for the first time?和http://www.postgresql.org/docs/8.4/static/app-initdb.html

【讨论】:

这是完全错误的。如果用户没有运行initdb,他们就不会运行数据库服务器并接受连接以生成报告的错误消息。请删除此误导性答案。 (顺便说一句,将来,请链接到 /docs/current/static/ 以避免过时的链接累积)

以上是关于Createuser:无法连接到数据库 postgres:致命:角色“tom”不存在的主要内容,如果未能解决你的问题,请参考以下文章

无法从另一个容器连接到 Postgres 容器

致命:连接到 postgres 时用户“postgres”的密码验证失败

使用 sqlalchemy 连接到本地 postgresql

为啥 PostgreSQL 中的新用户可以连接到所有数据库?

su postgres:对不起? [关闭]

MySQL Workbench 无法连接到我的 RDS 数据库:无法连接到 localhost