【问题标题】:Heroku pg:push psql: FATAL: password authentication failed for userHeroku pg:push psql:致命:用户的密码验证失败
【发布时间】:2016-05-28 01:53:58
【问题描述】:

我知道有人问过类似的问题,但没有一个解决方案奏效。我正在尝试将我的本地数据库推送到我的 Heroku 数据库,并且我不断收到 psql: FATAL: password authentication failed for user "windows username"。

我在 Windows 上,所以我尝试了 SET PGUSER=postgres SET PGPASSWORD=password

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

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

【问题讨论】:

    标签: postgresql heroku heroku-postgres


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

    【讨论】:

    【解决方案2】:

    感谢 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 then check that in the pg_restore you have the -F c part as in previous step with pg_dump
    • 我遇到&lt; 运算符保留以备将来使用。已尝试使用 | 而不是 &lt;-f 。它们都不起作用。任何解决方法建议?我在 VS Code 上使用 Powershell。
    【解决方案3】:

    我刚刚遇到了完全相同的问题,并成功解决了这个问题。 我没有使用带/不带用户名/密码的单行“heroku pg:push”命令,而是依靠两步: 第 1 步:pg_dump 第二步:pg_restore

    正如上面https://stackoverflow.com/users/4051445/na-peters 指出的那样 以及 Heroku 的简短暗示: https://devcenter.heroku.com/articles/heroku-postgresql#pg-psql

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

    要按照上面 NA Peters 的说明提取它(它是 postgres://xxxxxxx:yyyyyyyyyyyyyyyyyyyyyyyy@hhhhhh:5432/dddddd 中的 : 和 @ 之间的 y 字符串 期待它的工作

    【讨论】:

      【解决方案4】:

      对于那些正在为还原而苦苦挣扎的 Windows PowerShell 人员,请尝试:

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

      然后在出现提示时粘贴密码。

      【讨论】:

        猜你喜欢
        • 2013-11-15
        • 1970-01-01
        • 2017-12-16
        • 2017-02-06
        • 2015-09-10
        • 1970-01-01
        • 2021-06-16
        • 1970-01-01
        • 2023-04-05
        相关资源
        最近更新 更多