【问题标题】:How to correctly provide password to PostgreSQL when connecting remotely in Windows?在 Windows 中远程连接时如何正确向 PostgreSQL 提供密码?
【发布时间】:2011-05-27 04:51:23
【问题描述】:

数据库:PostgreSQL 9.0 客户端:Windows 7 服务器 Windows 2008,64 位

我正在尝试远程连接到 PostgreSQL 实例,以便对我的本地计算机执行 pg_dump。

一切都在我的客户端机器上运行,除了我需要在密码提示符处提供密码,我最终想用一个脚本来批处理。

我已按照此处的说明进行操作:

http://www.postgresql.org/docs/current/static/libpq-pgpass.html

但它不起作用。

回顾一下,我在服务器上创建了一个文件:C:/Users/postgres/AppData/postgresql/pgpass.conf,其中 PostgreSQL 是 db 用户。

该文件有一行包含以下数据:

\*:5432:\*postgres:[mypassword]

我还尝试将每个* 分别替换为[localhost|myip][mydatabasename]

在我的客户端机器上,我使用以下方式连接:

pg_dump -h <myip> -U postgres -w [mydbname] > [mylocaldumpfile]

我假设我需要提供-w 开关以忽略密码提示,此时它应该在服务器上的 AppData 目录中查找。

它只是回来了:

连接数据库失败:fe_sendauth:未提供密码。

作为一种解决方法,如果有一种方法可以让我的客户端计算机上的 Windows 批处理文件在 PostgreSQL 提示符处注入密码,那也可以。

【问题讨论】:

  • -h 是要连接的主机,你的是空的。 pgpass 文件中的前四个字段应该是文字值或 *,你的是混合的。 pgpass 文件应驻留在客户端计算机上,位于发出pg_dump 命令的用户的AppData 文件夹中 - 您的文件在服务器上。
  • Empty -h 是一个错字。我已经尝试了所有的'',没有'' 以及它们之间的所有组合。我也尝试过使用本地 AppData 文件,但同样的问题。
  • .pgpass 文件的权限是什么?它们需要仅供用户阅读。
  • pg_hba.conf 配置正确吗?
  • pg_hba 配置正确,因为如果我将方法设置为信任,我可以远程登录和备份。 pgpass 文件权限被授予用户。

标签: postgresql


【解决方案1】:

如果您使用的是 UTF-8 编码,请确保您使用的是无 BOM 模式。

否则将第一行作为注释:

# This line may contain hidden BOM bytes
localhost:5432:database:username:password

您也不需要转义星号\*,只需输入* 即可启用通配符匹配。

【讨论】:

    【解决方案2】:

    创建 pgpass.conf 文件

    Windows > Start > Run
    type %APPDATA%
    press OK
    Create a folder: postgresql
    Create a file  : pgpass.conf   (under postgresql folder)
    

    打开 pgpass.conf 文件

    现在你应该准备好下面的文件,通过下面打开它(确保它存在):

    Windows > Start > Run
    type %APPDATA%\postgresql\pgpass.conf
    press OK
    

    粘贴 pgpass.conf 文件内容

    粘贴下面

    # serverDomainOrIP:PORT:databaseName:userName:password
    # 127.0.0.1:5432:myDbName:postgres:myPassword
    # *:5432:*:*:myPassword
    

    您可以执行以下操作之一:
    - 删除第 3 行的 #,并在“myPassword”位置输入您的密码

    - 删除第 2 行的 #,并提供 ip(或 yourDomain.com)、dbname、用户名和密码

    希望对您有所帮助。

    【讨论】:

      【解决方案3】:

      确保您以与 pgpass.conf 文件所在文件夹对应的用户身份登录。

      【讨论】:

        【解决方案4】:

        我已经让它与以下内容一起工作:

        pgpass.conf:

        127.0.0.1:5432:*:username:password
        

        但是,我将它存储在这里:

        C:\Users\<user>\AppData\Roaming\postgresql
        

        由于某种原因,在 Postgres 的前一次迭代中,数据库生成了 pgpass 文件并将其存储在那里。我遇到了与您相同的问题,将其移至该目录并且可以正常工作。我不知道为什么。

        那么,你需要做的就是:

        pg_dump -h myip mydb > mylocaldumpfile
        

        ...确保myippgpass.conf 中的ip 相同。如果不是,它会提示您输入密码。

        【讨论】:

          【解决方案5】:

          我遇到了一个类似的问题,但我无法解决 - 我无法让脚本识别 pgpass.conf 文件。然而,我使用了在我正在使用的批处理文件(PostgreSQL 9.6)中设置 PGPASSWORD 环境变量的解决方法。

          在批处理文件中:

          SET PGPASSWORD=<<password>> pg_dump.exe -h <<host>> -p <<port>> -U <<user>> -Fc -b -v -f <<output file path>> <<database>>

          【讨论】:

          • 在 Windows 10 上为我工作,使用 bin 目录的本地副本仅针对远程 DB 运行 pg_dump.exe 文件。
          【解决方案6】:

          您可以使用 pgAdmin III 来存储密码(在服务器的属性中)。 该操作会自动创建一个正确的 pgpass.conf 文件。然后,您可以安排一个任务来运行一个简单的批处理文件,该文件将读取:

          "C:\path\to\pg_dump.exe" -U <user> -w <database> > C:\path\to\database.backup

          【讨论】:

            【解决方案7】:

            它对我有用:

            使用命令行

            cd %appdata%
            mkdir postgresql
            cd postgresql
            notepad pgpass.conf
            

            在 pgpass.conf 中粘贴您的连接字符串 (*:5432:*postgres:[mypassword]) 并保存文件。 要连接到 postgres,请使用:

            psql/pg_dump -U <username> -h <host> -w <other params you want to use>
            

            【讨论】:

            • 天啊.. 它在 \Roaming 中,我在 \Local 中使用它。谢谢。
            • 连接字符串不应该是 *:5432:*:postgres:[mypassword](第二个 * 后的冒号)。根据 postgresql.org/docs/9.1/libpq-pgpass.html ,格式为 hostname:port:database:username:password
            【解决方案8】:

            我已经解决了类似的问题(仅在 Linux 中)在 pgpass 和 psql 中使用 ip 地址。

            .pgpass

            127.0.0.1:5432:db:dbuser:123
            

            psql 参数

            psql -d db -U dbuser -h 127.0.0.1 -w
            

            带有默认设置的pg_hba conf:

            # IPv4 local connections:
            84 host    all         all         127.0.0.1/32          md5
            

            【讨论】:

            • Windows 上的 9.3 也发生了同样的事情。将主机更改为 127.0.0.1 修复了它。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-12-10
            • 1970-01-01
            • 2016-07-13
            • 2012-07-24
            相关资源
            最近更新 更多