首页 文章

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

提问于
浏览
281

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

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

谢谢你的帮助!

16 回答

  • 1

    \du 命令返回:

    角色名称= postgres @ implicit_files

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

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

    但那 postgres=# \password postgres@implicit_files 运行正常 .

    sudo -u postgres createuser -s postgres 之后,第一个变体也起作用 .

  • 1

    如果您使用ID不是 postgres 的用户运行 initdb ,并且未使用 --username=postgres (或 -U postgres )选项指定用户名,则会发生这种情况 .

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

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

    createuser --superuser postgres
    

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

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

  • 288

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

    你可以:

    psql
    

    继续本教程 .

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

    简要说明:

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

  • 1

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

    解析度:
    brew services start postgresql
    重启你的电脑 .

  • 171

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

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

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

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

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

    sudo -u user psql user
    

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

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

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

  • 0

    关键是"I installed the 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
    

    这将使那些 FATAL: role "postgres" does not exist 消失 .

  • 7

    对于MAC:

    • 安装Homebrew

    • brew install postgres

    • initdb /usr/local/var/postgres

    • /usr/local/Cellar/postgresql/<version>/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进行GUI .

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

    查看此网站以获取更多相关文章:https://medium.com/@Nithanaroy/installing-postgres-on-mac-18f017c5d3f7

  • 22
    createuser postgres --interactive
    

    或者只是用超级用户postgresl

    createuser postgres -s
    
  • 4

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

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

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

  • 3

    First 您需要创建一个用户:

    sudo -u postgres createuser --superuser $USER
    

    After 您创建了一个数据库:

    sudo -u postgres createdb $USER
    

    Change $USER 到您的系统用户名 .

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

  • 15

    我需要取消 $PGUSER

    $ unset PGUSER
    $ createuser -s postgres
    
  • 11

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

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

  • 0

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

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

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

    因此,而不是这个命令: sudo -u postgres psql -U postgres ,它将更加符合postgres.app的精神: psql ,它会自动连接到与您的用户名相匹配的数据库,以及恰好是超级用户的同名数据库帐户,所以它可以做任何权限 .

  • 0

    对于它的 Value ,我有ubuntu和许多软件包安装,它与它发生冲突 .

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

    sudo -i -u postgres-xc
    psql
    
  • 230

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

    createuser -s -U $USER
    
  • 10

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

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

相关问题