【问题标题】:psql: FATAL: role "postgres" does not existpsql:致命:角色“postgres”不存在
【发布时间】:2013-02-24 11:02:00
【问题描述】:

我是 postgres 新手。

我为 mac 安装了 postgres.app。我在玩 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相关的所有内容并重新安装所有内容?

感谢大家的帮助!

【问题讨论】:

  • 重新启动计算机。确保从 brew services start postresql 执行 Launchd。

标签: macos postgresql terminal


【解决方案1】:

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

请注意,错误消息确实谈论缺少数据库,它谈论的是缺少角色。在登录过程的后期,它也可能会因丢失的数据库而绊倒。

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

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

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

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

sudo -u user psql user

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

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

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

【讨论】:

  • 对我来说,用户并没有被创建——这可以代替 CREATE USER postgres WITH SUPERUSER PASSWORD 'password'; 使用 postgres v10。
  • 如果你从homebrew 安装了Postgres,那么你需要在你的终端运行/usr/local/opt/postgres/bin/createuser -s postgres
  • 我不得不跑/usr/local/opt/postgresql/bin/createuser -s postgres
  • 如果您使用的是特定版本的 postgres,那么您需要在路径中包含该版本 -- /usr/local/opt/postgresql@11/bin/createuser -s postgres
  • 对于 M1 Mac:/opt/homebrew/bin/createuser -s postgres
【解决方案2】:

关键是“我为 mac 安装了 postgres.app”。 This application 使用角色名称与您的登录(短)名称相同的数据库超级用户设置本地 PostgreSQL 安装。

当 Postgres.app 首次启动时,它会创建 $USER 数据库, 当没有指定时,这是 psql 的默认数据库。这 默认用户是 $USER,没有密码。

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

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

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

这将使那些 FATAL: 角色“postgres”不存在消失。

【讨论】:

  • 如果您使用 Homebrew 的 postgres,那么您需要 /usr/local/Cellar/postgresql/9.2.4/bin/createuser -s postgres(显然是 9.2.4 版)。
  • 对于 postgres.app 9.3,他们似乎重新安排了目录。我试过:/Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres,但这产生了相同的错误消息:“createuser:无法连接到数据库postgres:致命:角色“postgres”不存在"
  • /Applications/Postgres.app/Contents/Versions/9.3/bin/createuser -s postgres 对我来说运行正确。
  • @RogerLipscombe 如果安装后运行brew link postgresql,则无需将整个路径附加到createuser,一个简单的createuser -s postgres 就可以了
  • createuser -s postgres 为我工作。我用 Homebrew 安装了 postgres
【解决方案3】:

对于 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

在启动时启动服务器

  • 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

【讨论】:

  • 使用最新的 brew 安装,您可以通过 brew services start postgresql 启动 postgres
  • 第4步可以是/usr/local/opt/postgresql@<version>/bin/createuser -s postgres
【解决方案4】:
createuser postgres --interactive

或者使用

创建一个超级用户 postgresl
createuser postgres -s

【讨论】:

  • 当我的 pgadmin 不断询问 postgres 用户并且我开始具有 postgres 角色时,我发现这个答案很有用,这个命令创建了它,我将自动生成的 pw 添加到我的 pgadmin 中并解决了问题!
  • 这对我有用.. 但这样:“创建用户 postgres”
【解决方案5】:

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

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

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

createuser --superuser postgres

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

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

【讨论】:

    【解决方案6】:

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

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

    【讨论】:

    • 正是我想要的。
    • 谢谢你。在 pgAdmin 4 中设置服务器时,这对我有用。
    【解决方案7】:

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

    sudo -u postgres createuser --superuser $USER
    

    创建数据库后:

    sudo -u postgres createdb $USER
    

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

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

    【讨论】:

      【解决方案8】:

      我需要取消设置$PGUSER

      $ unset PGUSER
      $ createuser -s postgres
      

      【讨论】:

        【解决方案9】:

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

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

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

        【讨论】:

        • 这是否意味着这个新的 posgres 用户没有密码?
        【解决方案10】:

        如果您从 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
        

        【讨论】:

          【解决方案11】:

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

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

          【讨论】:

          • 这适用于我在 MacOS 11.1 中。谢谢!
          【解决方案12】:

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

          在我的例子中,我使用这个变量的目的是为我的特定数据库设置另一个用户,但它最终当然改变了主要的 PostgreSQL 用户。

          【讨论】:

            【解决方案13】:

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

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

            createuser -s postgres

            它对我有用。

            【讨论】:

              【解决方案14】:

              这是唯一为我修复它的:

              createuser -s -U $USER
              

              【讨论】:

              • 这使当前用户成为系统超级用户,而不仅仅是 postgres 超级用户。我会说这通常是一个坏主意,因为它绕过了通常的安全策略。您应该使用sudo 来获得临时超级用户权限。
              【解决方案15】:

              这对我有用

              createuser -s postgres

              注意:我使用的是 mac catalina

              【讨论】:

                【解决方案16】:

                删除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 帐户恰好是超级用户的同名,因此它可以根据权限执行任何操作。

                【讨论】:

                • 好的。但是为什么我在尝试删除用户 db 时会收到错误 ERROR: cannot drop the currently open database?那么使用这个 postgres.app 不是一个好习惯吗?
                • 连接到数据库时不能删除它。无论如何,您为什么要删除它?这是为了您的方便。
                • 我只是想看看我能不能。所以当我启动我的 psql 和 postgres.app 时,它就像一个正确的默认数据库?现在访问权限呢?我不能再设置它们了吗?我看到template0和template1有访问权限
                • @user805981 Postgres.app 用于测试和开发目的;它是 Heroku 的一个 PostgreSQL 包,旨在让使用 Ruby on Rails 开发的 Mac 用户更容易使用 PostgreSQL 而不是默认的 SQLite 进行测试。 Rails 使用倾向于使用 SQLite 进行测试并部署到 PostgreSQL,这会导致各种问题,因此 Heroku 也尝试让在 PostgreSQL 上进行测试更容易。 Postgres.app 适合测试,但我不会考虑将其用于生产或真实数据,这不是它的用途。
                【解决方案17】:

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

                对我来说正确的答案是:

                sudo -i -u postgres-xc
                psql
                

                【讨论】:

                  【解决方案18】:

                  brew install postgresqlbrew services start postgresql 之后,我们有一个名为postgres 的数据库。所以我们可以默认这样打开psql。

                  psql postgres
                  

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

                  CREATE USER postgres
                  

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

                  【讨论】:

                  • 很好的指导。 'psql postgres' 正在连接当前用户内的 postgres 数据库(默认)
                  【解决方案19】:

                  如果您在运行 docker 容器后立即遇到此问题,请尝试销毁容器并重新创建它。这为我解决了:

                  docker-compose down
                  docker-compose up --force-recreate
                  

                  这应该使用postgresuser 作为默认用户重新创建数据库

                  【讨论】:

                    【解决方案20】:

                    通过自制软件安装了新的 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 restart postgresql
                    

                    所以,这是一个奇迹或类似的东西......

                    那么就:

                    psql -d postgres
                    

                    【讨论】:

                    • 顺便说一句,我之前安装了 postgres,但大约 2 周没有使用,可能是错误或其他问题,它已修复,我不知道,但它可以工作
                    【解决方案21】:

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

                    你可以:

                    psql
                    

                    然后继续教程。

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

                    简要说明:

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

                    【讨论】:

                    • 清除了 postgres 中的一些重要区别。谢谢。
                    【解决方案22】:

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

                    建议 - 备份数据库以确保安全。

                    【讨论】:

                      【解决方案23】:

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

                      分辨率:
                      brew services start postgresql
                      重启电脑。

                      【讨论】:

                        【解决方案24】:

                        \du 命令返回:

                        角色名称 = postgres@implicit_files

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

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

                        但是postgres=# \password postgres@implicit_files 运行良好。

                        sudo -u postgres createuser -s postgres 之后,第一个变体也可以使用。

                        【讨论】:

                          【解决方案25】:

                          我今天遇到了类似的问题,实际上我不确定用户名是什么。这是第二件事,如果您在企业下并且没有系统管理员访问权限,postgres 将创建您的企业用户名作为postgres 管理员用户名。如果您通过Homebrew 安装它肯定会发生。在这种情况下,只需使用 brew 运行您的 psql 服务并回显用户名

                          brew services start postgresql

                          然后

                          echo $USER

                          您将看到 postgres 用户的用户名。

                          【讨论】:

                            猜你喜欢
                            • 2017-12-20
                            • 2015-03-28
                            • 1970-01-01
                            • 2018-02-18
                            • 1970-01-01
                            • 2013-01-28
                            • 2017-03-08
                            相关资源
                            最近更新 更多