小编典典

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

all

我是postgres新手。

我为 mac 安装了 postgres.app。我在玩 psql 命令时不小心删除了 postgres 数据库。我不知道里面有什么。

我被困在sudo -u postgres psql postgres

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

$ which 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 相关的所有内容并重新安装所有内容?

谢谢你们的帮助!


阅读 141

收藏
2022-03-08

共1个答案

小编典典

注意:如果您使用自制软件安装了 postgres,请参阅下面 @user3402754 的评论。

请注意,错误消息 不是 关于缺少数据库的,而是关于缺少角色的。在登录过程的后期,它也可能偶然发现丢失的数据库。

但第一步是检查缺失的角色:psql命令的输出是什么\du?在我的 Ubuntu 系统上,相关行如下所示:

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

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

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

sudo -u user psql user

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

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

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

2022-03-08