我是postgres的新手。

我安装了postgres。我在玩psql命令,我不小心掉了postgres数据库。我不知道里面有什么。

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

我被困在sudo -u postgres psql postgres

错误信息:psql: FATAL: role "postgres"不存在

$ 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和重新安装一切?

谢谢你们的帮助!


当前回答

通过homebrew安装了新的mac (M1)和最新的postgres(14.0),没有什么对我的这个主题有帮助,但我只是重新安装了postgres,它帮助了我:

brew services stop postgresql
rm -rf /opt/homebrew/var/postgres/*
brew reinstall postgresql
initdb --locale=C -E UTF-8 /opt/homebrew/var/postgres
brew services restart postgresql

所以,这是一个奇迹之类的……

然后:

psql -d postgres

其他回答

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

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

注意,问题中提到的教程不是用postgres编写的。应用程序在脑海中。 与一般用于Unix的PostgreSQL相反,postgres。App试图看起来像一个正常的应用程序,而不是一个由专用的postgres用户运行的服务,该用户拥有与普通用户不同的特权。postgres。应用程序由您自己的帐户运行和管理。

因此,与其这样的命令:sudo -u postgres psql -u postgres,它将更符合postgres的精神。psql,它自动连接到与用户名称匹配的数据库,并使用同名的db帐户(碰巧是超级用户),因此它可以做任何权限方面的事情。

当你使用一个ID不是postgres的用户运行initdb时,没有指定postgres的用户名——username=postgres或-U postgres,就会发生这种情况。

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

要解决这个问题,只需使用postgres附带的createuser实用程序创建一个名为postgres的新用户,选项为——superuser。该实用程序可以在Postgres的bin目录中找到。如。

createuser --superuser postgres

如果您有一个自定义主机名或端口,那么一定要设置适当的选项。

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

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

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

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

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

如果没有至少一个超级用户的角色,那么你有一个问题:-)

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

sudo -u user psql user

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

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

但自从你毕业后。应用程序设置似乎不这样做,你也不应该这样做。简单调整教程。

这对我很有效

创建用户 -s postgres

注意:我用的是mac catalina

psql -U debug -d dashboard_3

我必须使用postgres:14 Docker容器的终端指定用户名和数据库名,以便能够将psql输入到数据库中。