Tom*_*ell 79 database postgresql
我正在尝试第一次设置Postgres,我需要创建一个具有读取和创建数据库权限的用户.但是,当我在终端中使用"createuser username"时,我收到以下消息:
createuser:无法连接到数据库postgres:致命:角色"tom"不存在
Tom是我现在登录的Ubuntu用户帐户.我正在尝试创建"postgres"的用户名,然后执行"psql -U psql template1",这样我就可以创建一个数据库并为我的Rails应用程序分配一个所有者.
有帮助吗?
Cra*_*ger 117
你提到了Ubuntu所以我猜你会通过apt从Ubuntu安装PostgreSQL软件包.
如果是这样,postgresPostgreSQL用户帐户已经存在,并且配置为可以通过peer身份验证来访问unix套接字pg_hba.conf.您可以通过以postgresunix用户身份运行命令来实现它,例如:
sudo -u postgres createuser owning_user
sudo -u postgres createdb -O owning_user dbname
Run Code Online (Sandbox Code Playgroud)
这一切都在Ubuntu PostgreSQL文档中,这是Google首次针对"Ubuntu PostgreSQL"发布的文章,并且涉及众多Stack Overflow问题.
(通过省略诸如操作系统和版本,如何安装PostgreSQL等详细信息,您已经很难回答这个问题了)
use*_*754 47
运行这个:
sudo -u postgres psql
Run Code Online (Sandbox Code Playgroud)
要么
psql -U postgres
Run Code Online (Sandbox Code Playgroud)
在你的终端进入postgres
postgres=#
Run Code Online (Sandbox Code Playgroud)
跑
CREATE USER new_username;
Run Code Online (Sandbox Code Playgroud)
注意:在您将要创建的情况下,将new_username替换为您要创建的用户.
postgres=# CREATE USER new_username;
CREATE ROLE
Run Code Online (Sandbox Code Playgroud)
由于您希望该用户能够创建数据库,因此您需要将该角色更改为超级用户
postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE
Run Code Online (Sandbox Code Playgroud)
为了确认,一切都很成功,
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=#
Run Code Online (Sandbox Code Playgroud)
更新/修改:
我最近在Mac上遇到了类似的错误:
psql: FATAL: role "postgres" does not exist
这是因为我的安装是使用数据库超级用户设置的,其角色名称与您的登录(短)名称相同.
但是一些linux脚本假设超级用户具有传统的角色名称 postgres
我是如何解决这个问题的?
如果您使用homebrewrun 安装:
/usr/local/Cellar/postgresql/10.5/bin/createuser -s postgres
要么:
/usr/local/Cellar/postgresql/10.5/bin/createuser -s new_username
如果您安装了postgres.app适用于Mac的运行:
/Applications/Postgres.app/Contents/Versions/10.5/bin/createuser -s postgres
PS:用你的PostgreSQL版本替换10.5
Tan*_*may 26
sudo -u postgres createuser -s tom
Run Code Online (Sandbox Code Playgroud)
这应该可以帮助您,因为如果管理员没有为您创建PostgreSQL用户帐户,就会发生这种情况.也可能是您被分配了一个与您的操作系统用户名不同的PostgreSQL用户名,在这种情况下您需要使用-U开关.
1- 以默认 PostgreSQL 用户 (postgres) 登录
sudo -u postgres -i
Run Code Online (Sandbox Code Playgroud)
2- 作为 postgres 用户。使用createuser命令添加一个新的数据库用户
[postgres]$ createuser --interactive
Run Code Online (Sandbox Code Playgroud)
3-出口
[postgres]$ exit
Run Code Online (Sandbox Code Playgroud)
您的错误发布在官方文档中.你可以阅读这篇文章.
我已经从那篇文章中复制了你的原因(以及超链接的URL):
如果管理员尚未为您创建PostgreSQL用户帐户,则会发生这种情况.(PostgreSQL用户帐户与操作系统用户帐户不同.)如果您是管理员,请参阅第20章以获取有关创建帐户的帮助.您需要成为安装PostgreSQL的操作系统用户(通常是postgres)才能创建第一个用户帐户.也可能是您被分配了一个与您的操作系统用户名不同的PostgreSQL用户名; 在这种情况下,您需要使用-U开关或设置PGUSER环境变量来指定PostgreSQL用户名
为了您的目的,您可以:
1)创建PostgreSQL用户帐户:
sudo -u postgres createuser tom -d -P
Run Code Online (Sandbox Code Playgroud)
(-P设置密码的-d选项;允许为用户名"tom"创建数据库的选项.请注意,"tom"是您的操作系统用户名.这样,您可以执行PostgreSQL命令而不用sudo.)
2)现在你应该能够执行createdb和其他PostgreSQL命令.
小智 -3
您需要首先运行 initdb。它将创建数据库集群和初始设置
请参阅第一次如何配置postgresql?和http://www.postgresql.org/docs/8.4/static/app-initdb.html