我正在尝试首次设置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 应用程序创建一个数据库并分配所有者。
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 文档中,这是 "Ubuntu PostgreSQL" 的 Google 首个搜索结果,并且已经在许多 Stack Overflow 的问题中涉及过。
(您忽略了一些细节,如您使用的操作系统和版本,以及如何安装 PostgreSQL,这使得回答这个问题变得更加困难。)pg_hba.conf
以使用 MD5
认证;(详见手册);(b)创建一个同名的操作系统用户并继续使用 peer
认证;或者(c)更高级一些,创建一个 pg_ident.conf
映射,使您的操作系统用户能够作为新用户登录。 - Craig Ringer运行以下命令:
sudo -u postgres psql
或者
psql -U postgres
在终端输入命令以进入PostgreSQL
注意:如果你使用的是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: 致命错误:角色“postgres”不存在
这是因为我的安装设置了一个数据库超级用户,它的角色名称与您的登录(短)名称相同。
但一些 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
来安装的,请运行:
/Applications/Postgres.app/Contents/Versions/10.5/bin/createuser -s postgres
P.S:将 10.5 替换为你的 PostgreSQL 版本
psql -U postgres
。 - leontalbotsudo -u postgres createuser -s tom
如果管理员没有为您创建 PostgreSQL 用户账户,或者您被分配的 PostgreSQL 用户名与操作系统用户名不同,则需要使用 -U 选项。
1- 以默认的PostgreSQL用户 (postgres) 登录
sudo -u postgres -i
2- 以postgres用户身份。使用createuser
命令添加一个新的数据库用户。
[postgres]$ createuser --interactive
3-exit
[postgres]$ exit
sudo -u postgres createuser tom -d -P
(使用-P
选项来设置密码;使用-d
选项允许为您的用户名“tom”创建数据库。请注意,“tom”是您的操作系统用户名。这样,您就可以执行PostgreSQL命令而无需使用sudo
。)
2)现在您应该能够执行createdb
和其他PostgreSQL命令了。
如果您不想更改认证方法(ident)并且不想破坏pg_hba.conf,请使用以下方法:
首先登录默认用户
sudo su - postgres
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。
对于Linux系统,你可以激活超级用户来创建数据库,步骤如下:
打开终端/Shell
使用以下命令进入postgres用户:
sudo -u postgres -i
现在你的终端会显示为"postgres@anish-Latitude-E7450:~$"
psql
现在你的终端会显示为"postgres=#"
alter user [postgres_user_name] createdb;
现在该用户将具有创建数据库的权限。
使用'\q'退出psql
使用exit
退出postgres用户
希望这对你有所帮助。
你需要先运行initdb。它将创建数据库集群和初始设置。
请参阅如何首次配置postgresql?和http://www.postgresql.org/docs/8.4/static/app-initdb.html
initdb
命令,他们将没有一个正在运行且可以接受连接以产生报告的错误信息的数据库服务器。请删除这个误导性的答案。(顺便说一下,在未来,请链接到/docs/current/static/以避免链接失效的问题累积) - Craig Ringer