Heroku pg:push psql: FATAL: password authentication failed for user Heroku pg:push psql:FATAL:用户验证失败的密码认证。

8

我知道类似的问题已经被问过了,但是没有一个解决方案起作用。我正在尝试将我的本地数据库推送到Heroku数据库,但我一直收到psql错误:FATAL:用户“Windows用户名”的密码身份验证失败。

由于我使用的是Windows系统,所以我尝试设置SET PGUSER=postgres SET PGPASSWORD=password

然后运行heroku pg:push localdb DATABASE_URL --app herokuapp

但我仍然遇到这个愚蠢的密码错误。问题在于它看起来仍然在使用我的Windows用户名而不是postgres用户名...我该如何解决这个问题?

4个回答

9

感谢Heroku支持,最终成功实现了此项工作。因此,对于Windows用户,以下是步骤:

首先,您需要将本地数据库转储到一个转储文件中:

pg_dump --verbose -F c -Z 0 -U postgres -h localhost -p 5432 yourdbname > local.dump

然后您需要从Heroku应用程序配置变量中获取连接字符串:

heroku config:get DATABASE_URL

接下来你需要从连接字符串中提取出用户名/主机名/数据库名称等部分,例如:postgres://用户名:密码@主机名:端口号/数据库名称。 警告:在生产环境中运行此操作可能会导致数据丢失,请谨慎使用pg_restore。手动运行此操作时,您可能会在没有CLI检查的情况下破坏您的数据,因此您可能需要手动验证目标数据库是否为空。

pg_restore --verbose --no-acl --no-owner -U username -h hostname -p 5432 -d databasename < local.dump

然后在提示输入密码时,只需将连接字符串中的密码粘贴即可。


如果出现以下错误: pg_restore: [archiver] did not find magic string in file header那么请检查在 pg_restore 中是否有与之前的 pg_dump 步骤相同的 -F c 部分。 - Csharls
2
我遇到了“<”运算符被保留供将来使用的问题。尝试使用“|”代替“<”,还尝试了“-f”,但都没有起作用。有什么解决方法建议吗?我在VS Code上使用PowerShell。 - Ananta K Roy

3
  1. 运行SET PGUSER=postgres。这很重要,否则heroku将使用不同的用户,您的密码将无法工作。
  2. 运行heroku pg:push localdb DATABASE_URL --app herokuapp
  3. 在提示时输入postgres的密码。

我该如何执行第一个命令?那是一个环境变量吗? - Atif Shafi
是的。https://learn.microsoft.com/zh-cn/windows-server/administration/windows-commands/set_1 - Alvin

0

我刚刚遇到了同样的问题,并成功解决了它。 与其使用带/不带用户名/密码的单行'heroku pg:push'命令,我选择了2步骤: 步骤1:pg_dump 步骤2:pg_restore

正如https://stackoverflow.com/users/4051445/na-peters所指出的那样, 以及Heroku简要提示的: https://devcenter.heroku.com/articles/heroku-postgresql#pg-psql

关键是要输入的密码不是访问本地Postgresql数据库时使用的密码。相反,密码是一个64个字符的字符串,您可以从中获取: heroku config:get DATABASE_URL -a

按照NA Peters上面的说明提取它(它是postgres://xxxxxxx:yyyyyyyyyyyyyyyyyyyyyyyy@hhhhhh:5432/dddddd中:和@之间的y字符串) 期望它能够起作用。


0

对于那些在Windows PowerShell中恢复时遇到困难的人,请尝试以下操作:

Get-Content -raw local.dump | pg_restore -F c --verbose --no-acl --no-owner -U <username> -h <hostname> -p 5432 -d <databasename>

然后在提示时粘贴密码。


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