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

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等详细信息,您已经很难回答这个问题了)

  • 三个选择。(a)设置该用户的密码,然后编辑pg_hba.conf以对该用户使用md5 auth(请参见手册);(b)以相同的名称创建OS用户,并继续使用“ peer”身份验证;或(c)更高级,创建一个“ pg_ident.conf”映射以允许您的OS用户以新用户身份登录。 (2认同)

use*_*754 47

请参阅git gist,其中包含说明

运行这个:

 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开关.


Sam*_*adi 8

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)


Roc*_*nde 5

您的错误发布在官方文档中.你可以阅读这篇文章.

我已经从那篇文章中复制了你的原因(以及超链接的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

  • 这是完全错误的。如果用户没有运行“initdb”,他们就不会运行数据库服务器并接受连接以生成报告的错误消息。请删除这个误导性的答案。(顺便说一句,将来,请链接到 /docs/current/static/ 以避免陈旧链接累积) (5认同)