psql:致命:角色“postgres”不存在

问题描述 投票:296回答:16

我是postgres新手。

我安装了postgres.app for mac。我正在玩psql命令,我不小心删掉了postgres数据库。我不知道里面是什么。

我正在制作一个教程:http://www.rosslaird.com/blog/building-a-project-with-mezzanine/

我被困在sudo -u postgres psql postgres

错误消息:psql: FATAL: role "postgres" does not exist

$ ps psql

/Applications/Postgres.app/Contents/MacOS/bin/psql

这是打印出来的psql -l

                                List of databases
    Name    |   Owner    | Encoding | Collate | Ctype |     Access privileges     
------------+------------+----------+---------+-------+---------------------------
 user       | user       | UTF8     | en_US   | en_US | 
 template0  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
 template1  | user       | UTF8     | en_US   | en_US | =c/user                  +
            |            |          |         |       | user      =CTc/user      
(3 rows)

那我应该采取什么步骤?删除与psql相关的所有内容并重新安装所有内容?

谢谢你的帮助!

macos postgresql terminal
16个回答
300
投票

请注意,错误消息不会讨论丢失的数据库,它会讨论缺少的角色。稍后在登录过程中,它可能会偶然发现丢失的数据库。

但第一步是检查缺失的角色:命令psql\du中的输出是什么?在我的Ubuntu系统上,相关的行看起来像这样:

                              List of roles
 Role name |            Attributes             | Member of 
-----------+-----------------------------------+-----------
 postgres  | Superuser, Create role, Create DB | {}        

如果superuser没有至少一个角色,那么你有一个问题:-)

如果有,您可以使用它登录。并查看\l命令的输出:usertemplate0数据库上template1的权限与我的Ubuntu系统上的超级用户postgres相同。所以我认为你的设置简单使用user作为超级用户。所以你可以尝试这个命令登录:

sudo -u user psql user

如果user真的是数据库超级用户,你可以为他创建另一个数据库超级用户和一个私有的空数据库:

CREATE USER postgres SUPERUSER;
CREATE DATABASE postgres WITH OWNER postgres;

但是,由于你的postgres.app设置似乎没有这样做,你也不应该这样做。简单地适应教程。


4
投票

删除postgres数据库并不重要。这个数据库最初是空的,它的目的只是让postgres用户有一种“家”连接,如果需要的话。

您仍然可以使用SQL命令CREATE DATABASE postgres;重新创建它

请注意,问题中提到的教程不是用postgres.app编写的。与一般的PostgreSQL for Unix相反,postgres.app试图看起来像普通应用程序,而不是由具有与普通用户不同权限的专用postgres用户运行的服务。 postgres.app由您自己的帐户运营和管理。

因此,而不是这个命令:sudo -u postgres psql -U postgres,它将更多地发布在postgres.app的精神上:psql,它自动连接到与您的用户名相匹配的数据库,以及恰好是超级用户的同名数据库帐户,所以它可以做任何权限。


3
投票

对于它的价值,我有ubuntu和许多软件包安装,它与它发生冲突。

对我来说,正确的答案是:

sudo -i -u postgres-xc
psql

1
投票

这是唯一一个为我修复它的人:

createuser -s -U $USER

1
投票

在Ubuntu系统上,我清除了PostgreSQL并重新安装它。所有数据库都已恢复。这解决了我的问题。

建议 - 将数据库备份放在更安全的一边。


0
投票

我不认为这里需要sudo,因为psql -l返回数据库列表。这告诉我initdb是在用户的当前用户下运行的,而不是在postgres用户下运行的。

你可以:

psql

继续本教程。

我建议A.H的创建postgres用户和数据库的一般要点,因为许多应用程序可能期望它存在。

简要说明:

PostgreSQL不会以对操作系统的管理访问权限运行。相反,它与普通用户一起运行,并且为了支持对等身份验证(询问尝试连接的操作系统),它会与运行初始化过程的用户一起创建用户和数据库。在这种情况下,它是您的普通用户。


0
投票

前一天我在执行brew services stop postgresql时陷入了这个问题。 第二天:brew services start postgresql不起作用。这是因为如使用自制软件安装时所示。 postgresql使用launchd ...在计算机开机时加载。 解析度: brew services start postgresql 重启你的电脑。


0
投票

\du命令返回:

角色名称= postgres@implicit_files

而那个命令postgres=# \password postgres返回错误:

错误:角色“postgres”不存在。

但那postgres=# \password postgres@implicit_files运行良好。

sudo -u postgres createuser -s postgres之后,第一个变体也起作用。


239
投票

关键是“我安装了postgres.app for mac。” This application使用数据库超级用户设置本地PostgreSQL安装,其角色名称与您的登录(短)名称相同。

当Postgres.app首次启动时,它会创建$ USER数据库,当没有指定时,它是psql的默认数据库。默认用户是$ USER,没有密码。

一些脚本(例如,在Linux系统上使用pgdump创建的数据库备份)和教程将假定超级用户具有postgres的传统角色名称。

您可以通过一次性使本地安装看起来更传统并避免这些问题:

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

这将使那些致命的:角色“postgres”不存在消失。


190
投票

对于MAC:

  1. 安装Homebrew
  2. brew install postgres
  3. initdb /usr/local/var/postgres
  4. /usr/local/Cellar/postgresql/<version>/bin/createuser -s postgres/usr/local/opt/postgres/bin/createuser -s postgres将使用最新版本。
  5. 手动启动postgres服务器:pg_ctl -D /usr/local/var/postgres start

在启动时启动服务器

  • mkdir -p ~/Library/LaunchAgents
  • ln -sfv /usr/local/opt/postgresql/*.plist ~/Library/LaunchAgents
  • launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist

现在,它已设置,使用psql -U postgres -h localhost登录或使用PgAdmin进行GUI。

默认情况下,用户postgres不会有任何登录密码。

查看此网站以获取更多相关文章:https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7


29
投票
createuser postgres --interactive

或者只是用超级用户postgres

createuser postgres -s

15
投票

对我来说,这段代码有效:

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

它来自这里:http://talk.growstuff.org/t/fatal-role-postgres-does-not-exist/216/4


12
投票

首先,您需要创建一个用户:

sudo -u postgres createuser --superuser $USER

创建数据库后:

sudo -u postgres createdb $USER

$USER更改为您的系统用户名。

你可以看到完整的解决方案here


10
投票

我需要取消设置$PGUSER

$ unset PGUSER
$ createuser -s postgres

8
投票

如果您使用ID不是initdb的用户运行postgres,而未使用postgres--username=postgres指定-U postgres用户名,则会发生这种情况。

然后使用您用于运行initdb的系统用户帐户创建数据库集群,并为其授予超级用户权限。

要修复它,只需使用Postgres附带的postgres实用程序创建一个名为--superuser的新用户,其选项为createuser。该实用程序可以在Postgres的bin目录中找到。例如

createuser --superuser postgres

如果您有自定义主机名或端口,请务必使用set the appropriate options

不要忘记删除initdb为您创建的其他用户帐户。


7
投票

在命令行上运行它应该修复它

/Applications/Postgres.app/Contents/Versions/9.4/bin/createdb <Mac OSX Username Here>

© www.soinside.com 2019 - 2024. All rights reserved.