首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Createuser:无法连接到数据库postgres:致命:角色"tom“不存在

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

Stack Overflow用户
提问于 2013-06-07 06:05:45
回答 9查看 162.8K关注 0票数 110

我正在尝试第一次设置Postgres,并且我需要创建一个具有读取和创建数据库权限的用户。但是,当我使用以下命令时:

代码语言:javascript
运行
复制
createuser username

在我的终端中,我收到以下消息:

创建用户:无法连接到数据库postgres:致命:角色"tom“不存在

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

EN

回答 9

Stack Overflow用户

发布于 2013-06-07 08:04:48

你提到了Ubuntu,所以我猜你从Ubuntu到apt安装了PostgreSQL包。

如果是,则postgres PostgreSQL用户帐户已存在,并且已配置为可通过pg_hba.conf中unix套接字的peer身份验证进行访问。您可以通过以postgres unix用户身份运行命令来访问它,例如:

代码语言:javascript
运行
复制
sudo -u postgres createuser owning_user
sudo -u postgres createdb -O owning_user dbname

这一切都在Ubuntu PostgreSQL文档中,这是谷歌对"Ubuntu PostgreSQL“的第一个命中,并在许多堆栈溢出问题中涵盖。

(您忽略了操作系统和版本、如何安装PostgreSQL等细节,这使得回答这个问题变得更加困难。)

票数 152
EN

Stack Overflow用户

发布于 2016-05-28 23:07:23

See git gist with instructions here

运行以下命令:

代码语言:javascript
运行
复制
 sudo -u postgres psql

代码语言:javascript
运行
复制
psql -U postgres

才能进入postgres

NB:如果你在Mac上,上面的两个命令都失败了,跳转到下面关于Mac的部分。

代码语言:javascript
运行
复制
postgres=#

代码语言:javascript
运行
复制
CREATE USER new_username;

注意:将new_username替换为您想要创建的用户,在本例中该用户将是tom。

代码语言:javascript
运行
复制
postgres=# CREATE USER new_username;
CREATE ROLE

由于您希望用户能够创建数据库,因此需要将角色更改为超级用户

代码语言:javascript
运行
复制
postgres=# ALTER USER new_username SUPERUSER CREATEDB;
ALTER ROLE

确认一下,一切都很顺利,

代码语言:javascript
运行
复制
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一起安装的,请运行:

/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 for Mac,请运行:

/Applications/Postgres.app/Contents/Versions/10.5/bin/createuser -s postgres

附言:将10.5替换为您的PostgreSQL版本

票数 85
EN

Stack Overflow用户

发布于 2013-08-08 02:42:39

代码语言:javascript
运行
复制
sudo -u postgres createuser -s tom 

这应该会对您有所帮助,因为如果管理员尚未为您创建PostgreSQL用户帐户,则会发生这种情况。也可能是为您分配的PostgreSQL用户名与您的操作系统用户名不同,在这种情况下,您需要使用-U开关。

票数 32
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16973018

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档