使用Heroku pg拒绝权限:拉到我的本地数据库

时间:2016-01-08 00:33:30

标签: postgresql heroku pull

我有一个在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"

的对等身份验证失败

1 个答案:

答案 0 :(得分:1)

我能够重现您的问题,但我也可以通过Gabriel建议更正postgrespeermd5的访问方式。每当您更改pg_hba.conf时,您都必须记住重新启动Postgres。在Ubuntu上,这应该这样做:

sudo service postgresql restart

另一种解决方案:

或者,如果用户权限对您来说不是一个大问题(例如,您的系统上没有其他用户),例如在VM中,您可以给自己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用户设置密码,该密码可能与您的操作系统登录用户相同({{1} } whoami``)。您可以通过在上面的echo \命令中包含-P标志来执行此操作,这将提示您输入新用户的密码,或者以Postgres超级用户身份登录(例如{{1} })和setting the password in psql

增编/ CAVEAT:

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

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