关于macos:psql:致命:角色“postgres”不存在 role “username” does not exist

psql: FATAL: role “postgres” does not exist

我是Postgres的新手。

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

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

我被困在EDOCX1[0]

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

$PSQL

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

这是从psql -l打印出来的。

1
2
3
4
5
6
7
8
9
                                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相关的所有内容并重新安装所有内容?

谢谢你们的帮助!


请注意,错误消息不会讨论缺少的数据库,它会讨论缺少的角色。在稍后的登录过程中,它还可能会因丢失的数据库而绊倒。

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

1
2
3
4
                              List OF roles
 ROLE name |            Attributes             | Member OF
-----------+-----------------------------------+-----------
 postgres  | Superuser, CREATE ROLE, CREATE DB | {}

如果superuser中没有至少一个角色,那么您会遇到一个问题:—)

如果有,可以使用它登录。看看你的\l命令的输出:usertemplate0template1数据库的权限与我的Ubuntu系统对超级用户postgres的权限相同。所以我认为您的设置simple使用user作为超级用户。因此,您可以尝试使用此命令登录:

1
sudo -u USER psql USER

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

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

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


关键是"我为Mac安装了postgres.app"。这个应用程序使用与您的登录名(简称)相同的数据库超级用户设置本地postgresql安装。

When Postgres.app first starts up, it creates the $USER database,
which is the default database for psql when none is specified. The
default user is $USER, with no password.

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

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

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

这将使这些致命:角色"postgres"并不存在。


对于Mac:

  • 安装自制
  • brew install postgres
  • initdb /usr/local/var/postgres
  • /usr/local/Cellar/postgresql//bin/createuser -s postgres/usr/local/opt/postgres/bin/createuser -s postgres将只使用最新版本。
  • 手动启动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 for gui。

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

    查看此网站以获取更多类似的文章:https://medium.com/@nithanaroy/installing-postgres-on-mac-18f017c5d3f7


    1
    createuser postgres --interactive

    或者让超级用户只使用

    1
    createuser postgres -s


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

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

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


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

    1
    sudo -u postgres createuser --superuser $USER

    创建数据库后:

    1
    sudo -u postgres createdb $USER

    $USER更改为系统用户名。

    您可以在这里看到完整的解决方案。


    我需要解除$PGUSER号决议:

    1
    2
    $ unset PGUSER
    $ createuser -s postgres

    在命令行上运行这个应该可以修复它

    /Applications/Postgres.app/Contents/Versions/9.4/bin/createdb


    删除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自动连接到一个与您的用户名相匹配的数据库,以及一个与超级用户同名的db帐户,这样它就可以做任何有权限的事情。


    就其价值而言,我安装了Ubuntu和许多软件包,并且与之发生冲突。

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

    1
    2
    sudo -i -u postgres-xc
    psql

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

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

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

    1
    createuser --superuser postgres

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

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


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

    建议-备份数据库以使其更安全。


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

    1
    createuser -s -U $USER


    在前一天执行了brew services stop postgresql后,我在这个问题上陷入了困境。第二天:江户十一〔11〕不工作。这是因为如使用自制程序安装时所示。PostgreSQL使用一个launchd…当您的计算机开机时加载。解决方法:brew services start postgresql重新启动计算机。


    \du命令返回:

    Role name = postgres@implicit_files

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

    ERROR: role"postgres" does not exist.

    但江户十一〔十六〕行得很好。

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


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

    你可以:

    1
    psql

    继续本教程。

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

    简要说明:

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