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

Createuser: could not connect to database postgres: FATAL: role “tom” does not exist

我正在尝试第一次设置Postgres,我需要创建一个具有读取和创建数据库权限的用户。 但是,当我在终端中使用"createuser username"时,我收到以下消息:

createuser: could not connect to database postgres: FATAL: role"tom" does not exist

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

有帮助吗?


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

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

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

这一切都在Ubuntu PostgreSQL文档中,这是Google首次针对"Ubuntu PostgreSQL"发布的文章,并且涉及众多Stack Overflow问题。

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


请参阅git gist,其中包含说明

运行这个:

1
 sudo -u postgres psql

要么

1
psql -U postgres

在你的终端进入postgres

1
postgres=#

1
CREATE USER new_username;

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

1
2
postgres=# CREATE USER new_username;
CREATE ROLE

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

1
2
postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE

为了确认,一切都很成功,

1
2
3
4
5
6
7
8
9
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/Cellar/postgresql/10.5/bin/createuser -s postgres

要么:

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

如果您安装了postgres.app for Mac run:

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

P.S:用你的PostgreSQL版本替换10.5


1
sudo -u postgres createuser -s tom

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


您的错误发布在官方文档中。你可以阅读这篇文章。

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

This will happen if the administrator has not created a PostgreSQL user account for you. (PostgreSQL user accounts are distinct from operating system user accounts.) If you are the administrator, see Chapter 20 for help creating accounts. You will need to become the operating system user under which PostgreSQL was installed (usually postgres) to create the first user account. It could also be that you were assigned a PostgreSQL user name that is different from your operating system user name; in that case you need to use the -U switch or set the PGUSER environment variable to specify your PostgreSQL user name

为了您的目的,您可以:

1)创建PostgreSQL用户帐户:

1
sudo -u postgres createuser tom -d -P

(设置密码的-P选项;允许为用户名'tom'创建数据库的-d选项。注意'tom'是您的操作系统用户名。这样,您可以执行PostgreSQL命令而不用< 5233> ING)。

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


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

1
sudo -u postgres -i

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

1
[postgres]$ createuser --interactive

3出境

1
[postgres]$ exit

在Windows上使用:

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

根据需要添加--superuser--createdb

有关更多选项,请参阅https://www.postgresql.org/docs/current/static/app-createuser.html。


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

sudo su - postgres

createuser odoo -U postgres -dRSP #P for password
(你想要的odoo或用户名o给postgres访问权限)


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

请参见如何首次配置postgresql?和http://www.postgresql.org/docs/8.4/static/app-initdb.html