Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Heroku pg的权限被拒绝:拉到我的本地数据库_Postgresql_Heroku_Pull - Fatal编程技术网

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

Postgresql Heroku pg的权限被拒绝:拉到我的本地数据库,postgresql,heroku,pull,Postgresql,Heroku,Pull,我在Heroku上有一个运行数据库的实时应用程序,但数据库需要更新,所以我的计划是拉取数据库,更新它,在我的开发服务器上测试它,然后将它推向生产。第一步,我正在努力拉heroku数据库来覆盖我的本地数据库。我正在使用以下命令: PGUSER=userforlocaldb PGPASSWORD=passwordforlocaldb heroku pg:pull HEROKU_POSTGRESQL_herokudbcolor localdbname --app herokuappname 我收到以

我在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 db填充PGUSER和PGPASSWORD值,但没有成功

我错过了什么


编辑:我更改了超级用户postgres的密码并重新运行了该命令。我得到了这个错误:用户“postgres”的对等身份验证失败我可以重现您的问题,但我也可以根据Gabriel的建议更正它,将
postgres
的访问方法从
对等身份验证更改为
md5
。无论何时更改
pg_hba.conf
,都必须记住重新启动Postgres。在Ubuntu上,这应该可以做到:

sudo service postgresql restart
另一种解决方案:

或者,如果用户权限不是您非常关心的问题(例如,您的系统上没有其他用户),例如在VM中,您可以为自己授予PostgreSQL超级用户权限:

sudo -u postgres createuser -s $YOUR_USERNAME [-P]
这将允许您创建一个新的数据库(
localdbname
),并加载在这种情况下似乎必要的
plpgsql
。(由于
plpgsql
,似乎不足以拥有CREATEDB角色)

现在,您应该能够在不使用
PGUSER
PGPASSWORD
的情况下运行原始命令:

heroku pg:pull HEROKU_POSTGRESQL_herokudbcolor localdbname --app herokuappname
编辑答案:

如果在运行
heroku pg:pull
命令时仍提示您输入密码,则您需要为新的Postgres用户设置密码,该密码可能与您的OS登录用户相同(
echo\
whoami``)。您可以通过在上面的
createuser
命令中包含
-P
标志来完成此操作,该命令将提示您输入新用户的密码,或者以Postgres超级用户身份登录(例如,
Postgres
)和

附录/警告:

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


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

您确定您的用户有创建数据库的权限吗?我将如何检查?我相信是这样,因为这是我记得使用的唯一用户。编辑:啊,我使用的用户不是超级用户是的。postgres是超级用户,所以我更改了密码。然后重新运行命令。请看问题的编辑。您能给我看一下您的
pg_hba.conf
文件吗?您应该将该文件中的用户
postgres
peer
更改为
md5
。好建议!我会在一段时间内尝试一下。所以我尝试在md5更改后重新启动postgres,但没有成功。然后我尝试创建一个新的超级用户,并用它运行命令,但命令仍然失败。你觉得你能更详细地告诉我你做了什么吗?命令的每一部分应该是什么?在我运行命令后,它会要求输入某个东西的密码,我不确定那是什么,但我已经尝试了我使用的所有密码。这种情况会发生在您身上吗?另外,如果我没有指定用户,它将使用哪个用户运行命令?此时我有postgres、myuser、mynewsuperuser。您在pg_hba.conf中有哪些行用于
local
连接(第1列)?作为参考,如果您没有指定
PGUSER
(并且确保您也没有导出值——您可以使用
echo$PGUSER
)检查这一点,然后可能会假设您正在尝试以操作系统登录的身份进行连接(即,
echo`whoami`