Heroku pg:pull密码认证失败。

11

我试图运行heroku pg:pull命令,但是似乎无法理解这个非常神秘的身份验证流程。

我正在运行的命令:


我正在运行的命令:

> heroku pg:pull app_name::RED localdb

然后我会看到一个密码提示,但是我怎么也想不出来。猜了两次后,我得到了 password authentication failed for user "Hanan" 的错误提示, 就这样。

我尝试了Heroku的密码、Windows账户密码以及所有我使用过的密码,但没有任何作用。我检查了一下,在PostgreSQL中没有名为"Hanan"的角色,因此通过psql更改密码也行不通。我可以通过其他角色登录到PostgreSQL,但就是这个默认的登录过程似乎无法解决。

另外,由于我正在使用Windows,我不确定如何运行像sudo -u postgres psql这样的命令,我认为这可能是一个解决方案。

如果有关于这个问题的任何帮助,我将非常感激,现在我真的很沮丧...


遇到了同样的问题...还没有找到解决办法。 - aardvarkk
虽然 heroku pg:pull 简短易用,但只要它不能正常工作,我就尝试使用下面链接中描述的方法将数据库拉到本地安装的 postgres,然后使用 taps 服务器填充我的应用程序数据库。这在我的 Mac-book 上有效,但是,正如你所猜测的那样,在我的 PC 上无法运行 :/链接:https://dev59.com/Cm035IYBdhLWcg3wC7qf - hananamar
6个回答

14

显然可以设置环境变量PGUSER和PGPASSWORD,如这里所述。

但是,在给定的语法中,这在Windows上无法正常工作。要在Windows上执行此操作,请运行以下命令:

SET PGUSER=[pg_username]

SET PGPASSWORD=[pg_password]

输入这两行后,Postgres将使用给定的身份验证信息登录你,而不是尝试使用Windows用户名进行登录。


非常好用,谢谢! - Sprachprofi
很棒的回答。heroku pg:pull --help 应该包含这个信息。 - Miron

7
我经常遇到在运行heroku pg:pull时出现问题。在我这种情况下,问题是pg:pull命令只有在我的本地PostgreSQL服务器设置了密码时才能正常工作。
要设置密码,请运行psql localdb并执行以下SQL语句:
ALTER USER my_user_name with password 'my_new_password';

您并不一定需要始终使用这个密码。运行psql localdb,看看是否提示输入密码; 在我的情况下, 我仍然可以在不输入密码的情况下登录到psql。

现在运行heroku pg:pull --app my_heroku_app POSTGRESQL_COLOR localdb,并在提示时输入新密码(两次)。


难以置信!由于某种原因,在我的笔记本电脑上不需要这样做,但在我的台式机上需要...你救了我! - bkunzi01
@bkunzi01:这取决于/etc/postgresql/<version>/main/pg_hba.conf文件中的验证方法。将local/all/all从md5更改为peer(并重新启动postgres集群或整个服务),密码提示将消失。在我的情况下,这是必要的,因为(使用md5和当前用户postgres密码的正确答案)任务会启动,但一分钟后会出现身份验证失败。这可能是一个bug。但使用对等身份验证就可以了。 (我认为,对等身份验证只适用于Linux) - mirek

3
我正在使用 Windows 10 64 位操作系统、PowerShell,并需要使用以下命令来正确设置本地的 PostgreSQL 环境变量:
C:\> $Env:PGUSER="[pg_username]"  
C:\> $Env:PGPASSWORD="[pg_password]"  

为了验证这些设置是否正确,请使用以下命令列出所有本地环境变量:
C:\> Get-ChildItem Env: 

在执行此操作后,我能够在不被提示输入密码的情况下运行heroku pg:pull命令。

1
之前的回答对我没有用或者不符合我的口味,所以我一直在搜索。感谢Rayz在这篇文章如何在Windows中添加PostgreSQL用户?中提供的答案,我能够在Windows Powershell中得出这个单行命令。
 & { $env:PGUSER="username";$env:PGPASSWORD="password"; heroku pg:push local-db DATABASE_URL --app heroku-app}

显然,您需要将变量作为由分号分隔的列表传递,用括号括起来,括号前面有一个“&”符号。您的函数(heroku pg:pull/pg:push/...)必须是该列表的成员。根据我的当前测试,它在powershell中使用pg:push正常工作,括号内的项目顺序不重要。


不错,我之前一直在使用标准命令提示符,但这对于 PowerShell 用户应该很有帮助。谢谢。 - hananamar

0

我使用Windows 10,尝试了这里提供的所有解决方案,但都没有成功。

最终对我有用的是进入系统属性并在那里编辑我的环境变量。我将它们添加到我的系统变量中,重新启动了终端,然后就能运行了。需要注意的一点是,我首先尝试将用户和密码添加到我的用户变量中,但那样不起作用。

PGUSER YourPostgresUser 
PGPASSWORD YourPassword

在更新变量后,我还运行了Get-ChildItem Env:来检查它们是否已添加。


0

我太懒了,不想去找如何更改Heroku使用的凭据。SET PGUSER和SET PASSWORD对我没有用,我所做的是这样的: 错误显示“janbr”的凭据无效,因此我在本地数据库中创建了具有许多特权的用户。我使用DBeaver进行操作,并使用我在安装Postgres时设置的凭据。 虽然不是很干净的解决方案。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接