【问题标题】:PostgreSQL error: Fatal: role "username" does not existPostgreSQL 错误:致命:角色“用户名”不存在
【发布时间】:2012-08-08 19:15:02
【问题描述】:

我正在设置我的 PostgreSQL 9.1。我不能用 PostgreSQL 做任何事情:不能createdb,不能createuser;所有操作都返回错误信息

Fatal: role h9uest does not exist

h9uest是我的账号名,我在这个账号下sudo apt-get installPostgreSQL 9.1。
root 帐户仍然存在类似错误。

【问题讨论】:

标签: postgresql authentication


【解决方案1】:

我使用 docker-compose 进行了健康检查。

healthcheck:
  test: ['CMD-SHELL', 'pg_isready']
  interval: 5s
  timeout: 5s
  retries: 5

如果您也有更改用户:

healthcheck:
  test: ['CMD-SHELL', 'pg_isready -U postgres'] # <<<---
  interval: 5s
  timeout: 5s
  retries: 5

【讨论】:

    【解决方案2】:

    按照这些步骤让 postgres 工作。

    1. 在您的终端中,使用以下命令找到 Application Support 文件夹。 /Users/[用户名]/库/应用支持
    2. 删除应用程序,Postgres。
    3. 重新安装应用程序,它应该可以正常工作了。

    【讨论】:

      【解决方案3】:

      将端口从 5432 更改为 5433 这样简单的操作对我有用。

      【讨论】:

      • 直接与此问题无关。
      【解决方案4】:

      使用操作系统用户 postgres 创建您的数据库 - 只要您没有设置具有与您的相应权限对应的必要权限的数据库 角色同名操作系统用户(在您的情况下为h9uest):

      sudo -u postgres -i
      

      建议herehere

      然后再试一次。以系统用户postgres 操作完成后键入exit

      或者执行单个命令createuser as postgressudo,就像另一个答案中的demonstrated by drees

      重点是使用与同名数据库角色匹配的操作系统用户通过ident authentication 授予访问权限。 postgres 是初始化数据库集群的默认操作系统用户。 The manual:

      为了引导数据库系统,一个新初始化的 系统始终包含一个预定义角色。这个角色永远是 “超级用户”,默认情况下(除非在运行 initdb 时更改) 将与初始化的操作系统用户同名 数据库集群。通常,此角色将命名为postgres。 为了创建更多角色,您首先必须像这样连接 初始角色。

      我听说过使用非标准用户名或操作系统用户不存在的奇怪设置。你需要在那里调整你的策略。

      阅读手册中的database rolesclient authentication

      【讨论】:

      • 无法以用户 postgres 运行sudo etc... 如何安装程序?见this S2geometry installation problem
      • 根据配置,可能只需要su postgres
      • sudo -u postgres 不起作用,而 sudo -u postgres -i 起作用! -i 标志有什么作用?
      • @parsecer: 一个交互式shell被启动,类似于su,但是基于sudo权限。见man sudo
      • 使用 Postgres 12,我必须将 -u 更改为 -U,然后我得到“无效选项 -- 'i'”。
      【解决方案5】:

      在尝试了许多其他人的解决方案后,都没有成功,这个答案终于帮助了我。

      https://stackoverflow.com/a/16974197/2433309

      简而言之,跑步

      sudo -u postgres createuser owning_user
      

      创建一个名为 owning_user 的角色(在本例中为 h9uest)。之后,您可以在终端以您设置的任何帐户名运行rake db:create,而无需进入 Postgres 环境。

      【讨论】:

      • 如果在此之后出现“权限不足”错误,可以将 -s 标志附加到上述命令中。这会将您的新用户创建为超级用户。如果您决定这样做,请注意这样做的安全隐患。
      • 我得到“权限不足”,但现在我得到错误:滚动“用户名”已经存在。
      • @ConnorLeech 您可以将“postgres”替换为您的 PG 超级用户的名称。就我而言,这是我的名字。
      • 我还必须使用-s,并且不需要使用sudo -u postgres(只需createuser new_user 工作正常)
      • psql: FATAL: role "jonny" does not exist 好吧sudo -u postgres -s createuser jonny 那么为什么createuser: creation of new role failed: ERROR: role "jonny" already exists
      【解决方案6】:

      使用--no-owner --no-privileges 标志转储和恢复

      例如

      转储 - pg_dump --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname &gt; /tmp/full.dump

      恢复 - pg_restore --no-owner --no-privileges --format=c --dbname=postgres://userpass:username@postgres:5432/schemaname /tmp/full.dump

      【讨论】:

        【解决方案7】:
        psql postgres
        
        postgres=# CREATE ROLE username superuser;
        postgres=# ALTER ROLE username WITH LOGIN;
        

        【讨论】:

        • psql postgres 结果:psql: FATAL: role "root" does not exist
        • psql postgres -U postgres?取决于您拥有的用户 (-U)。
        • 谢谢!因为我不知道 postgres 密码,所以我很难用 root 备份 postgresql
        • 我收到错误“必须是超级用户才能创建超级用户”
        【解决方案8】:

        Windows 用户:psql -U postgres

        您应该会看到 PostgreSQL 的命令行界面:postgres=#

        【讨论】:

        • 谢谢伙计。这在 Windows 上对我有用。
        【解决方案9】:

        对于版本 Postgres 9.5,使用以下命令:

        psql -h localhost -U postgres
        

        希望这会有所帮助。

        【讨论】:

          【解决方案10】:

          在我的情况下,手动创建数据库集群解决了这个问题。

          由于某种原因,当我安装 postgres 时,没有创建“初始数据库”。执行initdb 对我有用。

          the PostgreSQL Wiki - First steps提供了这个解决方案:

          initdb

          通常将 postgres 安装到您的操作系统会创建一个“初始数据库”并启动 postgres 服务器守护程序运行。如果没有,那么您需要run initdb

          【讨论】:

            【解决方案11】:

            我在 macOS 上安装了它并且必须:

            cd /Applications/Postgres.app/Contents/Versions/9.5/bin
            createuser -U postgres -s YOURUSERNAME
            createdb YOURUSERNAME
            

            这里是来源:https://github.com/PostgresApp/PostgresApp/issues/313#issuecomment-192461641

            【讨论】:

              【解决方案12】:

              工作方法,

              1. vi /etc/postgresql/9.3/main/pg_hba.conf
              2. local all postgres peer 在这里将 peer 更改为 trust
              3. 重启,sudo service postgresql restart

              4. 现在试试,psql -U postgres

              【讨论】:

              • 很明显,trust 方法只在完全安全的环境中是可取的。虽然可以从不受信任的连接进行访问,但切勿像那样公开您的数据库集群。
              • 检查:如果postgresql服务没有启动,可能是文件pg_hba.conf有错误
              【解决方案13】:

              按照这些步骤,它会为你工作:

              1. 运行msfconsole
              2. 输入 db_console
              3. 一些信息会显示给你选择谁告诉你做的信息:db_connect user:pass@host:port.../database对不起我不记得了,但是就像这个然后用信息替换用户和密码以及主机和数据库包含在database.yml中的炮位:/usr/share/metasploit-framework/config
              4. 你会看到的。在后台重建模型缓存。
              5. 更新后输入 apt-get update && apt-get upgrade 重新启动终端并午餐 msfconsole 并且它可以工作,您可以通过输入 msfconsole: msf&gt;db_status 来检查它是否已连接。

              【讨论】:

                【解决方案14】:
                sudo su - postgres
                
                psql template1
                

                在 pgsql 上创建具有“超级用户”权限的角色

                CREATE ROLE username superuser;
                eg. CREATE ROLE demo superuser;
                

                然后创建用户

                CREATE USER username; 
                eg. CREATE USER demo;
                

                为用户分配权限

                GRANT ROOT TO username;
                

                然后启用登录该用户,这样你就可以运行例如:psql template1,从普通的$终端:

                ALTER ROLE username WITH LOGIN;
                

                【讨论】:

                • 我刚刚安装了 PostgreSQL 9.4.4 并且能够使用以下命令创建一个新的超级用户:CREATE ROLE username superuser createdb login;,它结合了所有三个步骤...
                • # GRANT ROOT to me;错误:角色“root”不存在
                • 更简单的版本:sudo -u postgres createuser --superuser $USER; sudo -u postgres createdb $USER
                • @shacker #GRANT postgres TO username
                • 我使用 root 启动服务器然后```psql -U postgres -h 127.0.0.1 --command "CREATE USER postgresondocker WITH SUPERUSER PASSWORD 'postgresondocker';" &&\ createdb -O postgresondocker postgresondocker``如果我将它添加到pg_ident,我可以使用root来执行此操作吗?
                【解决方案15】:

                使用apt-get 安装 postgres 不会创建用户角色或数据库。

                为您的个人用户帐户创建超级用户角色和数据库:

                sudo -u postgres createuser -s $(whoami); createdb $(whoami)

                【讨论】:

                • 我需要将第二部分运行为:sudo -u postgres createdb $(whoami)
                • @SanD 如果您已将自己的用户帐户创建为超级用户(通过第一个命令中的-s 标志),您可以自己创建数据库。您无需将createdb 运行为postgres
                • 很好的答案!节省了我数小时的调试时间!
                【解决方案16】:

                在本地用户提示符下,而不是 root 用户提示符中,键入

                sudo -u postgres createuser <local username>
                

                然后输入本地用户的密码。

                然后输入上一条生成“角色'用户名'不存在”的命令。

                以上步骤为我解决了问题。 如果没有,请发送终端消息进行上述步骤。

                【讨论】:

                  【解决方案17】:

                  这对我有用:

                  psql -h localhost -U postgres
                  

                  【讨论】:

                  • 请添加以上用户的密码。
                  • @Vincent 如果密码在安装 PostgreSQL 后从未更改,默认为postgres(在 Linux 和 Windows 上测试)。
                  • role postgres does not exist
                  • 要访问特定数据库,您需要指定数据库名称psql -h hostname -U username -d database_name
                  猜你喜欢
                  • 2015-04-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2017-05-25
                  • 2017-09-02
                  • 2018-12-02
                  • 1970-01-01
                  • 2017-12-20
                  相关资源
                  最近更新 更多