我正在尝试首次设置Postgres,我需要创建一个具有读取和创建数据库权限的用户。但是,当我在终端中使用“createuser username”时,我收到以下消息:
createuser:无法连接到数据库postgres:致命:角色“tom”不存在
Tom是我现在登录的Ubuntu用户帐户。我正在尝试创建“postgres”的用户名,然后执行“psql -U psql template1”,这样我就可以创建一个数据库并为我的Rails应用程序分配一个所有者。
任何帮助?
答案 0 :(得分:109)
你提到了Ubuntu,所以我猜你从Ubuntu通过apt安装了PostgreSQL包。
如果是这样,postgres
PostgreSQL用户帐户已经存在,并且配置为可通过peer
中的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等详细信息,你已经很难回答这个问题了。)
答案 1 :(得分:41)
See git gist with instructions here
运行:
sudo -u postgres psql
OR
psql -U postgres
在你的终端进入postgres
postgres=#
运行
CREATE USER new_username;
注意:在您将要创建的情况下,将new_username替换为您要创建的用户。
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/Cellar/postgresql/10.5/bin/createuser -s postgres
或者:
/usr/local/Cellar/postgresql/10.5/bin/createuser -s new_username
如果您安装了postgres.app
for Mac run:
/Applications/Postgres.app/Contents/Versions/10.5/bin/createuser -s postgres
P.S:用你的PostgreSQL版本替换10.5
答案 2 :(得分:26)
sudo -u postgres createuser -s tom
如果管理员没有为您创建PostgreSQL用户帐户,这可能会对您有所帮助。也可能是您被分配了一个与您的操作系统用户名不同的PostgreSQL用户名,在这种情况下您需要使用-U开关。
答案 3 :(得分:5)
您的错误已发布在官方文档中。你可以read this article。
我已经从那篇文章中复制了你的原因(以及超链接的URL):
如果管理员尚未为您创建PostgreSQL用户帐户,则会发生这种情况。 (PostgreSQL用户帐户与操作系统用户帐户不同。)如果您是管理员,请参阅Chapter 20以获取创建帐户的帮助。您需要成为安装PostgreSQL的操作系统用户(通常是postgres)才能创建第一个用户帐户。也可能是您被分配了一个与您的操作系统用户名不同的PostgreSQL用户名;在这种情况下,您需要使用-U开关或设置PGUSER环境变量来指定PostgreSQL用户名
出于您的目的,您可以:
1)创建PostgreSQL用户帐户:
sudo -u postgres createuser tom -d -P
(用于设置密码的-P
选项;用于允许为用户名“tom”创建数据库的-d
选项。请注意,“tom”是您的操作系统用户名。这样,你可以在没有sudo
的情况下执行PostgreSQL命令。)
2)现在你应该能够执行createdb
和其他PostgreSQL命令。
答案 4 :(得分:4)
1-登录默认PostgreSQL用户(postgres)
createuser
2-作为postgres用户。使用[postgres]$ createuser --interactive
命令
[postgres]$ exit
3出射
<script type="text/javascript">
function klick() {
if($("#text").val() == 'test'){
jQuery('#rre').html("<h1>Hello there!</h1>");
}else{
jQuery('#rre').html("Error");
}
}
</script>
答案 5 :(得分:1)
我有同样的问题,我只是这样做
sudo su - postgres
createuser odoo -U postgres -dRSP #P for password ( odoo 或用户名,您想要给予postgres访问权限)
答案 6 :(得分:1)
在Windows上使用:
C:\PostgreSQL\pg10\bin>createuser -U postgres --pwprompt <USER>
适当添加--superuser
或--createdb
。
有关其他选项,请参见https://www.postgresql.org/docs/current/static/app-createuser.html。
答案 7 :(得分:0)
如果您不想更改身份验证方法(身份)并且与 pg_hba.conf 混淆,请使用以下命令:
首次以默认用户身份登录
sudo su - posgres
然后访问psql并创建一个与您登录的用户同名的用户
postgres=# CREATE USER userOS WITH PASSWORD 'garbage' CREATEDB;
您可以通过以下方式验证您的用户是否具有相应角色
postgres=# \du
此后,您可以创建数据库并使用进行验证
psql -d dbName
\l
\q
答案 8 :(得分:-3)
您需要先运行initdb。它将创建数据库集群和初始设置
请参阅How to configure postgresql for the first time?和http://www.postgresql.org/docs/8.4/static/app-initdb.html