Heroku pg:pull 对我的本地数据库的权限被拒绝
Permission denied with Heroku pg:pull to my local database
我有一个实时应用程序 运行 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"
的对等身份验证失败
我能够重现您的问题,但我也能够根据 Gabriel 的建议进行更正,将 postgres
的访问方法从 peer
更改为 md5
。每当更改 pg_hba.conf
时,都必须记住重新启动 Postgres。在 Ubuntu 上,应该这样做:
sudo service postgresql restart
另一种解法:
或者,如果用户权限对您来说不是一个大问题(例如,您的系统上没有其他用户),例如在 VM 中,您可以给自己 PostgreSQL-superuser 权限:
sudo -u postgres createuser -s $YOUR_USERNAME [-P]
这将允许您创建一个新的数据库 (localdbname
) 以及加载 plpgsql
extension,这在这种情况下似乎是必要的。 (由于 plpgsql
,所以具有 CREATEDB 角色似乎是不够的。)
现在您应该可以 运行 没有 PGUSER
或 PGPASSWORD
的原始命令:
heroku pg:pull HEROKU_POSTGRESQL_herokudbcolor localdbname --app herokuappname
编辑后的答案:
如果在 运行 执行 heroku pg:pull
命令时仍然提示您输入密码,您将需要为新的 Postgres 用户设置一个密码,该密码可能与您的 OS 登录用户 (echo \
whoami``)。您可以通过在上面的 createuser
命令中包含 -P
标志来执行此操作,这将提示您输入新用户的密码,或者以 Postgres 超级用户身份登录(例如,postgres
) 和 setting the password in psql
.
ADDENDUM/CAVEAT:
将这两种解决方案结合起来可能不是一个好主意,因为如果 postgres
用户由 md5
验证,您可能会遇到 运行ning sudo -u postgres ...
问题,但是没有设置密码,默认情况下 Linux 安装通常是这种情况。就我个人而言,一旦创建了新的 user/role,我发现作为 Postgres 超级用户(whoami
)发出命令比作为 postgres 超级用户更方便。
无论哪种方式,对于运行 heroku pg: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"
的对等身份验证失败我能够重现您的问题,但我也能够根据 Gabriel 的建议进行更正,将 postgres
的访问方法从 peer
更改为 md5
。每当更改 pg_hba.conf
时,都必须记住重新启动 Postgres。在 Ubuntu 上,应该这样做:
sudo service postgresql restart
另一种解法:
或者,如果用户权限对您来说不是一个大问题(例如,您的系统上没有其他用户),例如在 VM 中,您可以给自己 PostgreSQL-superuser 权限:
sudo -u postgres createuser -s $YOUR_USERNAME [-P]
这将允许您创建一个新的数据库 (localdbname
) 以及加载 plpgsql
extension,这在这种情况下似乎是必要的。 (由于 plpgsql
,所以具有 CREATEDB 角色似乎是不够的。)
现在您应该可以 运行 没有 PGUSER
或 PGPASSWORD
的原始命令:
heroku pg:pull HEROKU_POSTGRESQL_herokudbcolor localdbname --app herokuappname
编辑后的答案:
如果在 运行 执行 heroku pg:pull
命令时仍然提示您输入密码,您将需要为新的 Postgres 用户设置一个密码,该密码可能与您的 OS 登录用户 (echo \
whoami``)。您可以通过在上面的 createuser
命令中包含 -P
标志来执行此操作,这将提示您输入新用户的密码,或者以 Postgres 超级用户身份登录(例如,postgres
) 和 setting the password in psql
.
ADDENDUM/CAVEAT:
将这两种解决方案结合起来可能不是一个好主意,因为如果 postgres
用户由 md5
验证,您可能会遇到 运行ning sudo -u postgres ...
问题,但是没有设置密码,默认情况下 Linux 安装通常是这种情况。就我个人而言,一旦创建了新的 user/role,我发现作为 Postgres 超级用户(whoami
)发出命令比作为 postgres 超级用户更方便。
无论哪种方式,对于运行 heroku pg:pull
命令,我认为您将需要为用户设置密码并且还具有超级用户权限。