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

谢谢你们的帮助!


当前回答

关键是“我安装了postgres。mac版App。”此应用程序使用数据库超级用户(角色名与您的登录名(简称)相同)设置本地PostgreSQL安装。

当Postgres。app首先启动,它创建$USER数据库, 当没有指定时,它是PSQL的默认数据库。的 默认用户为$ user,没有密码。

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

你可以让你的本地安装看起来更传统一点,并通过执行一次来避免这些问题:

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

这将使那些FATAL: role "postgres"不存在消失。

其他回答

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

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

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

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

对于m1芯片和自制版本3.4.9,createuser被移动到特定包的Cellar中。 这对我很有效 /opt/homebrew/Cellar/postgresql@12/12.10_1/bin/createuser -s postgres . zip

这是唯一一个帮我解决问题的:

createuser -s -U $USER
createuser postgres --interactive

或者创建一个超级用户postgresl

createuser postgres -s

如果您是MAC (M1)用户,并使用HomeBrew安装了Postgres,那么请遵循以下步骤:

使用哪个psql . exe检查Postgres位置 如果第一个回显为/opt/homebrew/bin/psql,则执行/opt/homebrew/bin/createuser -s postgres

这个想法是使用postgres安装位置创建一个名为“postgres”的用户。因此,您可能需要根据Postgres的位置更改该命令。