【问题标题】:Postgres. role "root" does not exist. When trying to pg:pull database from Heroku邮递员。角色“root”不存在。尝试从 Heroku pg:pull 数据库时
【发布时间】:2014-09-22 20:14:38
【问题描述】:

我是 Postgres 和 Heroku 的新手。我正在尝试从 Heroku 中提取数据库,但我缺少一些简单的东西。我做到了:

heroku pg:pull HEROKU_POSTGRESQL_IVORY_URL localdb

我得到了错误:

createdb: database creation failed: ERROR:  permission denied to create database

然后我对“sudo”进行了同样的尝试。我得到了:

createdb: could not connect to database template1: FATAL:  role "root" does not exist

所以,一定是我缺少一些我找不到的简单命令。我在 Linux 上,我安装了 Postgres 并且可以正常工作。

【问题讨论】:

  • 我认为您必须在您的PostgreSQLPostgres 中创建一个名为root 的用户角色而不是Postgre.....create role root login

标签: postgresql heroku


【解决方案1】:

createdb 是 SQL 语句 CREATE DATABASE 的包装器,因此它需要连接到数据库。

默认情况下,所有 Postgres 命令行工具都尝试使用当前操作系统用户连接到数据库。由于错误消息表明数据库中没有名为root 的用户。因此,您需要传递 Postgres 超级用户的名称,以便 createdb 能够连接。这个用户通常被命名为postgres

如果存在这样的 Linux 用户,另一个选项是将 Linux 用户切换到 postgres

我不了解 Heroku,也不知道您是如何开始 createdb,但传递用户名的参数是 -U(适用于所有 Postgres 命令行程序)。所以你需要

 createdb -U postgres name_of_new_database

【讨论】:

  • 你的最后一个命令对我不起作用。但是,sudo postgres 有效(另请参阅 stackoverflow.com/a/28783632/952234
  • 最后一个命令在 Debian 8.7 中也给了我createdb: could not connect to database template1: FATAL: Peer authentication failed for user "postgres"。你可以做sudo -u postgres psql。您可以直接在psql:CREATE DATABASE masi 中创建数据库,这可以工作。 @YaroslavNikitenko
【解决方案2】:

尝试使用:

sudo su - postgres

然后使用:

createdb name_of_db;

【讨论】:

  • postgres@3a733ae6fd45:~$ createdb name_of_db;createdb: error: could not connect to database template1: FATAL: role "postgres" does not exist
  • @EugeneGr.Philippov,这可能是您安装 Postgres 的方式的问题。您使用的是哪个操作系统?当您编写命令 psql 时会显示什么
  • Ezrqn Kemboi:我后来发现docker-composepostgres 可能会创建一个在.yml 描述符中显式声明的角色,并且不会创建任何默认角色,如rolename root 或rolename @ 987654328@ 如果没有明确的指示这样做。好像是这样的!
  • Ezrqn Kemboi:另外,你不需要用sudo 包裹su
  • Ezrqn Kemboi:我已经成功地使用docker-compose.yml-declared 的非postgresroot 的角色登录。
【解决方案3】:

在某些情况下,您需要以postgres 用户身份执行createdb

以 postgres 用户身份运行 createdb(内联):

sudo -u postgres createdb name_of_database

Ezrqn Kemboi 建议的命令,sudo su - postgres将您切换到用户 postgres,此时您需要从该用户中退出 exit 以返回到您之前的任何人。如果您在脚本或某种形式的自动化中运行它,这不是很好。

我建议的命令不会“切换”给用户,而是会“就地”运行命令。我的建议更适合在脚本中运行。

选择您认为更适合您的用例的那个。

【讨论】:

    猜你喜欢
    • 2016-10-24
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 2019-07-25
    • 2018-02-18
    • 2019-09-10
    • 1970-01-01
    相关资源
    最近更新 更多