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


92

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

createuser username

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

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

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


您是否真的要创建一个“ postgres”用户?还是您的Rails应用程序的用户?通常,“ postgres”用户已经存在,而问题只是连接到该用户上,以执行您需要的操作。
ostergaard

Answers:


132

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

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

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

这就是Ubuntu PostgreSQL文档中的全部内容,这是Google首次针对“ Ubuntu PostgreSQL”命中该主题,并且在众多Stack Overflow问题中都有介绍。

(通过省略诸如所使用的操作系统和版本,如何安装PostgreSQL等详细信息,使您很难回答这个问题。)


创建owning_user之后,您如何与该用户建立联系?我的意思是连接我使用的默认用户sudo -u postgres psql postgres。同样的方法如何连接owning_user?
2014年

2
三个选择。(a)为该用户设置一个密码,然后编辑pg_hba.confmd5对该用户使用auth(请参阅手册);(b)用相同的名称创建一个OS用户,并继续使用peerauth;或(c)更高级,请创建一个pg_ident.conf映射,以允许您的OS用户以新用户身份登录。
Craig Ringer 2014年

66

在这里查看git gist及其说明

运行这个:

 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

我该如何解决?

如果使用homebrewrun安装:

/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了Mac版,请运行:

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

PS:用您的PostgreSQL版本替换10.5


这有助于进入postgres:psql -U postgres
leontalbot'Mar 3'18

29
sudo -u postgres createuser -s tom 

这将为您提供帮助,因为如果管理员没有为您创建PostgreSQL用户帐户,则会发生这种情况。也可能是您被分配了一个与您的操作系统用户名不同的PostgreSQL用户名,在这种情况下,您需要使用-U开关。


7

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

sudo -u postgres -i

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

[postgres]$ createuser --interactive

3出口

[postgres]$ exit

5

您的错误已发布在官方文档中。您可以阅读本文

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

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

为了您的目的,您可以执行以下操作:

1)创建一个PostgreSQL用户帐户:

sudo -u postgres createuser tom -d -P

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

2)现在您应该能够执行createdbPostgreSQL命令和其他命令了。


1

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

苏多苏-Postgres

createuser odoo -U postgres -dRSP #P输入密码(所需的odoo用户名,以授予postgres访问权限)



0

如果您不想更改身份验证方法(身份)并且与pg_hba.conf混淆,请使用以下命令:

首次登录为默认用户

 sudo su - posgres

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

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

您可以使用以下命令验证具有相应角色的用户

postgres=#  \du

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

psql -d dbName
\l
\q

-4

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

请参阅第一次如何配置postgresql?http://www.postgresql.org/docs/8.4/static/app-initdb.html


5
这是完全不正确的。如果用户没有运行,initdb他们将没有数据库服务器在运行并接受连接以产生报告的错误消息。请删除此误导性答案。(顺便说一句,将来,请链接到/ docs / current / static /以避免积累过时的链接)
Craig Ringer 2013年
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.