我正在尝试首次设置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应用程序分配一个所有者。
Answers:
您提到了Ubuntu,所以我猜您是通过apt从Ubuntu安装了PostgreSQL软件包的。
如果是这样,则postgres
PostgreSQL用户帐户已经存在,并且配置为可通过peer
身份验证通过UNIX中的Unix套接字进行访问pg_hba.conf
。您可以通过以postgres
unix用户身份运行命令来访问它,例如:
sudo -u postgres createuser owning_user
sudo -u postgres createdb -O owning_user dbname
这就是Ubuntu PostgreSQL文档中的全部内容,这是Google首次针对“ Ubuntu PostgreSQL”命中该主题,并且在众多Stack Overflow问题中都有介绍。
(通过省略诸如所使用的操作系统和版本,如何安装PostgreSQL等详细信息,使您很难回答这个问题。)
pg_hba.conf
以md5
对该用户使用auth(请参阅手册);(b)用相同的名称创建一个OS用户,并继续使用peer
auth;或(c)更高级,请创建一个pg_ident.conf
映射,以允许您的OS用户以新用户身份登录。
运行这个:
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
run安装:
/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
psql -U postgres
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”是您的操作系统用户名。这样,您可以执行PostgreSQL命令而无需sudo
ing。)
2)现在您应该能够执行createdb
PostgreSQL命令和其他命令了。
在Windows上使用:
C:\PostgreSQL\pg10\bin>createuser -U postgres --pwprompt <USER>
添加--superuser
或--createdb
视情况而定。
有关更多选项,请参见https://www.postgresql.org/docs/current/static/app-createuser.html。
如果您不想更改身份验证方法(身份)并且与pg_hba.conf混淆,请使用以下命令:
首次登录为默认用户
sudo su - posgres
然后访问psql并创建一个与您登录的用户名相同的用户
postgres=# CREATE USER userOS WITH PASSWORD 'garbage' CREATEDB;
您可以使用以下命令验证具有相应角色的用户
postgres=# \du
之后,您可以创建数据库并使用进行验证
psql -d dbName
\l
\q
您需要先运行initdb。它将创建数据库集群和初始设置
请参阅第一次如何配置postgresql?和http://www.postgresql.org/docs/8.4/static/app-initdb.html
initdb
他们将没有数据库服务器在运行并接受连接以产生报告的错误消息。请删除此误导性答案。(顺便说一句,将来,请链接到/ docs / current / static /以避免积累过时的链接)