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

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

createuser username

在我的终端机里,我收到如下信息:

不能连接到数据库 postgres: FATAL: role“ tom”不存在

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

179502 次浏览

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

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

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

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

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

这些都在 Ubuntu PostgreSQL文档中,这是 Google 第一次点击“ Ubuntu PostgreSQL”,其中包含了大量的 Stack Overflow 问题。

(由于省略了操作系统和版本、如何安装 PostgreSQL 等细节,这个问题变得更难回答。)

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 第二十章 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 用户帐户:

sudo -u postgres createuser tom -d -P

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

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

请看这里的说明

运行这个:

 sudo -u postgres psql

或者

psql -U postgres

in your terminal to get into postgres

注意: 如果你在 Mac 上,上面的两个命令都失败了,请跳到下面关于 Mac 的部分

postgres=#

快跑

CREATE USER new_username;

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

postgres=# CREATE USER new_username;
CREATE ROLE

因为您希望该用户能够创建一个 DB,所以需要将角色更改为超级用户

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

OR:

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

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

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

PS: 用 PostgreSQL 版本替换10.5

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

sudo -u postgres -i

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

[postgres]$ createuser --interactive

3-出口

[postgres]$ exit

我也有同样的问题,我就这么做了

Sudo su-postgres

Createuser odoo-U postgres-dRSP # P 作为密码 (Dooo用户名,你想给 postgres 访问)

使用 Windows:

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

酌情添加 --superuser--createdb

See https://www.postgresql.org/docs/current/static/app-createuser.html for further options.

如果您不想改变身份验证方法(ident)并且干扰 Pg _ hba. conf,请使用以下命令:

首先作为默认用户登录

 sudo su - postgres

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

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

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

postgres=#  \du

之后,您可以创建数据库并使用

psql -d dbName
\l
\q

对于 Linux,您可以激活 SUPERUSER 来启用创建如下数据库:

  1. Go to terminal/shell

  2. 输入内部 postgres 使用 sudo -u postgres -i

现在您的终端将类似于“ postgres@anish-纬度-E7450: ~ $”

  1. 输入 postgres 终端使用 psql

现在您的终端将类似于“ postgres = #”

  1. 输入 alter user [postgres_user_name] createdb;

Now the user will be having access to create db.

  1. 使用’q’退出 psql

  2. 使用 exit注销后记录

希望这个能帮到你。