我第一次尝试设置 Postgres,我需要创建一个具有读取和创建数据库权限的用户。但是,当我使用:
createuser username
在我的终端中,我收到以下消息:
createuser:无法连接到数据库 postgres:致命:角色“tom”不存在
Tom 是我现在登录的 Ubuntu 用户帐户。我正在尝试创建一个“postgres”的用户名,然后做一个psql -U psql template1
这样我就可以创建一个数据库并为我的 Rails 应用程序分配一个所有者。
我第一次尝试设置 Postgres,我需要创建一个具有读取和创建数据库权限的用户。但是,当我使用:
createuser username
在我的终端中,我收到以下消息:
createuser:无法连接到数据库 postgres:致命:角色“tom”不存在
Tom 是我现在登录的 Ubuntu 用户帐户。我正在尝试创建一个“postgres”的用户名,然后做一个psql -U psql template1
这样我就可以创建一个数据库并为我的 Rails 应用程序分配一个所有者。
你提到了 Ubuntu,所以我猜你通过 apt 从 Ubuntu 安装了 PostgreSQL 包。
如果是这样,则PostgreSQLpostgres
用户帐户已经存在,并且配置为可通过. 您可以通过以unix 用户身份运行命令来获得它,例如:peer
pg_hba.conf
postgres
sudo -u postgres createuser owning_user
sudo -u postgres createdb -O owning_user dbname
这一切都在Ubuntu PostgreSQL文档中,该文档是谷歌针对“Ubuntu PostgreSQL”的第一个热门产品,并且包含在许多 Stack Overflow 问题中。
(您通过省略操作系统和您所使用的版本、您如何安装 PostgreSQL 等细节,使这个问题更难回答。)
运行这个:
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
PS:用你的 PostgreSQL 版本替换 10.5
sudo -u postgres createuser -s tom
这应该对您有所帮助,因为如果管理员没有为您创建 PostgreSQL 用户帐户,就会发生这种情况。也可能是您被分配了一个与您的操作系统用户名不同的 PostgreSQL 用户名,在这种情况下,您需要使用 -U 开关。
1- 以默认 PostgreSQL 用户身份登录 (postgres)
sudo -u postgres -i
2- 作为 postgres 用户。createuser
使用命令添加新的数据库用户
[postgres]$ createuser --interactive
3出口
[postgres]$ exit
您的错误已发布在官方文档中。你可以阅读这篇文章。
我从那篇文章中复制了你的原因(并超链接了 URL):
如果管理员没有为您创建 PostgreSQL 用户帐户,就会发生这种情况。(PostgreSQL 用户帐户不同于操作系统用户帐户。)如果您是管理员,请参阅第 20 章以获取创建帐户的帮助。您需要成为安装 PostgreSQL 的操作系统用户(通常是 postgres)才能创建第一个用户帐户。也可能是您被分配了一个与您的操作系统用户名不同的 PostgreSQL 用户名;在这种情况下,您需要使用 -U 开关或设置 PGUSER 环境变量来指定您的 PostgreSQL 用户名
出于您的目的,您可以执行以下操作:
1) 创建一个 PostgreSQL 用户帐户:
sudo -u postgres createuser tom -d -P
(-P
设置密码的-d
选项;允许为您的用户名“tom”创建数据库的选项。请注意,“tom”是您的操作系统用户名。这样,您无需sudo
ing 即可执行 PostgreSQL 命令。)
2) 现在您应该可以执行createdb
其他 PostgreSQL 命令了。
如果您不想更改身份验证方法 (ident) 并与pg_hba.conf 混淆,请使用:
首次以默认用户登录
sudo su - postgres
然后访问 psql 并创建一个与您登录的用户同名的用户
postgres=# CREATE USER userOS WITH PASSWORD 'garbage' CREATEDB;
您可以使用相应的角色验证您的用户
postgres=# \du
在此之后,您可以创建数据库并使用
psql -d dbName
\l
\q
在 Windows 上使用:
C:\PostgreSQL\pg10\bin>createuser -U postgres --pwprompt <USER>
酌情添加--superuser
或--createdb
。
有关更多选项,请参阅https://www.postgresql.org/docs/current/static/app-createuser.html。
我有同样的问题,我只是这样做
sudo su - postgres
createuser odoo -U postgres -dRSP #P 用于密码(odoo或您想要授予 postgres 访问权限的用户名)
您需要先运行 initdb。它将创建数据库集群和初始设置
第一次请参阅如何配置 postgresql?和http://www.postgresql.org/docs/8.4/static/app-initdb.html