Heroku pg:pull 到我的本地数据库的权限被拒绝

Posted

技术标签:

【中文标题】Heroku pg:pull 到我的本地数据库的权限被拒绝【英文标题】:Permission denied with Heroku pg:pull to my local database 【发布时间】:2016-04-12 13:58:50 【问题描述】:

我有一个在 Heroku 上使用数据库运行的实时应用程序,但数据库需要更新,所以我的计划是提取数据库,更新它,在我的开发服务器上对其进行测试,然后将其推送到生产环境。第一步,我正在努力拉动 heroku 数据库来覆盖我的本地数据库。我正在使用以下命令:

PGUSER=userforlocaldb PGPASSWORD=passwordforlocaldb heroku pg:pull HEROKU_POSTGRESQL_herokudbcolor localdbname --app herokuappname

我收到此错误消息:

 !    createdb: database creation failed: ERROR:  permission denied to create database
 !    
 !    Unable to create new local database. Ensure your local Postgres is working and try again.

我也尝试用我的 heroku 数据库填充 PGUSER 和 PGPASSWORD 值,但这没有用。

我在这里错过了什么?

编辑:我更改了超级用户 postgres 的密码并重新运行了该命令。我收到此错误:用户“postgres”的对等身份验证失败

【问题讨论】:

你确定你的用户有创建数据库的权限吗? 我该如何检查?我相信这是我记得使用的唯一用户。编辑:啊,我使用的用户不是超级用户 是的,做到了。 postgres 是超级用户,所以我更改了密码。然后重新运行命令。查看问题的编辑。 你能给我看看你的pg_hba.conf文件吗? 您应该在该文件中将用户 postgrespeer 更改为 md5 【参考方案1】:

我能够重现您的问题,但我也可以通过 Gabriel 的建议来纠正它,将 postgres 的访问方法从 peer 更改为 md5。每次更改 pg_hba.conf 时都必须记住重新启动 Postgres。在 Ubuntu 上,应该这样做:

sudo service postgresql restart

另一种解决方案:

或者,如果用户权限对您来说不是一个大问题(例如,您的系统上没有其他用户),例如在虚拟机中,您可以给自己 PostgreSQL 超级用户权限:

sudo -u postgres createuser -s $YOUR_USERNAME [-P]

这将允许您创建一个新的数据库 (localdbname) 并加载 plpgsql extension,这在这种情况下似乎是必要的。 (由于plpgsql,拥有 CREATEDB 角色似乎是不够的。)

现在您应该能够在没有PGUSERPGPASSWORD 的情况下运行您的原始命令:

heroku pg:pull HEROKU_POSTGRESQL_herokudbcolor localdbname --app herokuappname

编辑答案:

如果在运行heroku pg:pull 命令时仍然提示您输入密码,您需要为新的 Postgres 用户设置密码,该密码可能与您的操作系统登录用户相同 (echo \whoami`` )。您可以通过在上面的createuser 命令中包含-P 标志来执行此操作,这将提示您输入新用户的密码,或者以Postgres 超级用户(例如postgres)和setting the password in psql 登录.

附录/警告:

结合这两种解决方案可能不是一个好主意,因为如果postgres 用户由md5 进行身份验证但未设置密码,则运行sudo -u postgres ... 可能会遇到问题,这通常是Linux 安装的情况默认。就我个人而言,一旦创建了新的用户/角色,我发现以 Postgres 超级用户 (whoami) 的身份发出命令比 postgres 超级用户更方便。

无论哪种方式,要运行heroku pg:pull 命令,我认为您需要为用户设置密码并拥有超级用户权限。

【讨论】:

好建议!一会儿我试试看。 所以我尝试在 md5 更改后重新启动 postgres,但没有成功。然后我尝试创建一个新的超级用户并使用它运行命令,但命令仍然失败。你认为你可以更详细地告诉我你做了什么吗?每条命令应该是什么等?在我运行命令后,它会要求输入密码,我不确定那是什么,但我已经尝试了我使用的所有密码。这种情况发生在你身上吗? 另外,如果我不指定用户,它将使用哪个用户来运行命令?此时我有 postgres、myuser、mynewsuperuser。 您在 pg_hba.conf 中有哪些行用于 local 连接(第一列)? 作为参考,如果您指定PGUSER(并确保您也没有导出值——您可以使用echo $PGUSER进行检查) ,那么可能会假定您正在尝试以操作系统登录名进行连接(即echo `whoami`

以上是关于Heroku pg:pull 到我的本地数据库的权限被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

从 Mac 中删除旧的 Postgres 版本 [重复]

如何从 Heroku 的 MongoHQ 下载生产数据到本地机器?

如何将我的生产应用程序数据复制到我的本地主机应用程序中

Django:从本地开发推送时,SQLite 在 Heroku 上覆盖 POSTGRESQL db

Nodemailer、Heroku、Gmail、无效登录 - 在本地工作

heroku上的咕噜声和凉亭