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

时间:2013-03-08 19:31:58

标签: macos postgresql terminal

我是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

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

感谢帮助人员!

21 个答案:

答案 0 :(得分:296)

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

但第一步是检查缺少的角色:命令psql的{​​{1}}内的输出是什么?在我的Ubuntu系统上,相关的行看起来像这样:

\du

如果 List of roles Role name | Attributes | Member of -----------+-----------------------------------+----------- postgres | Superuser, Create role, Create DB | {} 没有至少一个角色,那么您有问题:-)

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

postgres

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

sudo -u user psql user

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

答案 1 :(得分:237)

关键是“我安装了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”不存在消失。

答案 2 :(得分:186)

对于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
  6. 在启动时启动服务器

    • 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

答案 3 :(得分:27)

createuser postgres --interactive

或使用

制作超级用户postgresl
createuser postgres -s

答案 4 :(得分: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

答案 5 :(得分:12)

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

sudo -u postgres createuser --superuser $USER

后,您创建了一个数据库:

sudo -u postgres createdb $USER

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

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

答案 6 :(得分:10)

我需要取消设置$PGUSER

$ unset PGUSER
$ createuser -s postgres

答案 7 :(得分:9)

如果从brew安装了postgres,请在终端中运行它:

/usr/local/opt/postgres/bin/createuser -s postgres

答案 8 :(得分:7)

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

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

答案 9 :(得分:5)

如果您从 Brew 安装了 postgres 并且使用的是 Apple Silicon (M1) mac,请在您的终端中运行:

/opt/homebrew/opt/postgresql/bin/createuser -s postgres

如果您使用的是 Intel (x86) mac,请在终端中运行:

/usr/local/opt/postgres/bin/createuser -s postgres

答案 10 :(得分:5)

如果您以其ID不是initdb的用户身份运行postgres,而没有用postgres--username=postgres指定-U postgres用户名,则会发生这种情况。

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

要修复此问题,只需使用Postgres随附的postgres实用工具创建一个新的--superuser用户,并使用选项createuser。该实用程序可以在Postgres的bin目录中找到。例如

createuser --superuser postgres

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

别忘了删除initdb为您创建的其他用户帐户。

答案 11 :(得分:4)

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

仍然可以使用SQL命令CREATE DATABASE postgres;

重新创建它

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

因此,而不是这个命令:sudo -u postgres psql -U postgres,只需发出:psql,它就会更加符合postgres.app的精神,它会自动连接到与您的用户名相匹配的数据库,并且恰好是超级用户的同名的db帐户,因此它可以以权限方式执行任何操作。

答案 12 :(得分:4)

如果您使用的是docker,请确保您未使用POSTGRES_USER=something_else,因为标准映像使用此变量来知道PostgreSQL管理员用户的名称(默认为postgres

在我的情况下,我使用此变量的目的是将另一个用户设置到我的特定数据库中,但最终还是改变了主要的PostgreSQL用户。

答案 13 :(得分:3)

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

对我来说,正确答案是:

sudo -i -u postgres-xc
psql

答案 14 :(得分:3)

这个article帮助我解决了同样的问题psql: FATAL: role “postgres” does not exist

我使用的是 mac,所以我在终端中输入了这个命令:

createuser -s postgres

它对我有用。

答案 15 :(得分:1)

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

createuser -s -U $USER

答案 16 :(得分:1)

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

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

答案 17 :(得分:0)

我们在 postgresbrew install postgresql 之后有一个名为 brew services start postgresql 的数据库。这样我们就可以默认这样打开psql了。

psql postgres

然后我们可以在该 psql 控制台中添加具有任何名称的用户。

CREATE USER postgres

如果我们想要超级用户,那么我们可以在末尾添加 SUPERUSER

答案 18 :(得分:0)

\du命令返回:

  

角色名称= postgres@implicit_files

该命令postgres=# \password postgres返回错误:

  

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

但是postgres=# \password postgres@implicit_files运行正常。

sudo -u postgres createuser -s postgres之后,第一个变体也有效。

答案 19 :(得分:0)

我在前一天执行brew services stop postgresql时遇到了这个问题。
第二天:brew services start postgresql不起作用。这是因为如使用自制软件安装时所示。 postgresql使用launchd ...在计算机开机时加载。

决议:
brew services start postgresql
重新启动计算机。

答案 20 :(得分:0)

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

你可以:

psql

继续本教程。

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

简要说明:

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

相关问题