Createuser:无法连接到数据库postgres:致命:角色“tom”不存在

时间:2013-06-06 22:05:45

标签: database postgresql

我正在尝试首次设置Postgres,我需要创建一个具有读取和创建数据库权限的用户。但是,当我在终端中使用“createuser username”时,我收到以下消息:

  

createuser:无法连接到数据库postgres:致命:角色“tom”不存在

Tom是我现在登录的Ubuntu用户帐户。我正在尝试创建“postgres”的用户名,然后执行“psql -U psql template1”,这样我就可以创建一个数据库并为我的Rails应用程序分配一个所有者。

任何帮助?

9 个答案:

答案 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