Postgres pgpass windows - 不工作

Sco*_*ach 8 postgresql

DB:Postgres 9.0客户端:Windows 7 Server Windows 2008,64位

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

一切都在我的客户端机器上工作,除了我需要在密码提示符下提供密码,我最终想用脚本批量处理它.

我按照这里的说明操作:

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

但它不起作用.

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

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

\*:5432:\*postgres:[mypassword]
Run Code Online (Sandbox Code Playgroud)

我也试过来代替每个*[localhost|myip][mydatabasename]分别.

从我的客户端机器,我连接使用:

pg_dump -h <myip> -U postgres -w [mydbname] > [mylocaldumpfile]
Run Code Online (Sandbox Code Playgroud)

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

它回来了:

与数据库的连接失败:fe_sendauth:未提供密码.

任何见解都表示赞赏.

作为一个黑客解决方法,如果有一种方法,我可以告诉我的客户端机器上的Windows批处理文件在postgres提示符下注入密码,这也可以.

谢谢.

leo*_*idv 6

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

.pgpass

127.0.0.1:5432:db:dbuser:123
Run Code Online (Sandbox Code Playgroud)

psql参数

psql -d db -U dbuser -h 127.0.0.1 -w
Run Code Online (Sandbox Code Playgroud)

pg_hba conf默认设置:

# IPv4 local connections:
84 host    all         all         127.0.0.1/32          md5
Run Code Online (Sandbox Code Playgroud)


ana*_*kin 6

这个对我有用:

使用命令行

cd %appdata%
mkdir postgresql
cd postgresql
notepad pgpass.conf
Run Code Online (Sandbox Code Playgroud)

在pgpass.conf里面粘贴你的连接字符串(*:5432:*postgres:[mypassword])并保存文件.连接到postgres使用:

psql/pg_dump -U <username> -h <host> -w <other params you want to use>
Run Code Online (Sandbox Code Playgroud)

  • 天哪..它在“\Roaming”中,我在“\Local”中使用它。谢谢。 (3认同)

Man*_*ddy 6

创建 pgpass.conf 文件

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

打开 pgpass.conf 文件

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

Windows > Start > Run
type %APPDATA%\postgresql\pgpass.conf
press OK
Run Code Online (Sandbox Code Playgroud)

粘贴 pgpass.conf 文件内容

粘贴下面

# serverDomainOrIP:PORT:databaseName:userName:password
# 127.0.0.1:5432:myDbName:postgres:myPassword
# *:5432:*:*:myPassword
Run Code Online (Sandbox Code Playgroud)

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

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

希望有帮助。


Jay*_*den 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>>


Cas*_*sey 5

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

pgpass.conf:

127.0.0.1:5432:*:username:password
Run Code Online (Sandbox Code Playgroud)

不过,我把它存储在这里:

C:\Users\<user>\AppData\Roaming\postgresql
Run Code Online (Sandbox Code Playgroud)

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

然后,您需要做的就是:

pg_dump -h myip mydb > mylocaldumpfile
Run Code Online (Sandbox Code Playgroud)

...确保它myip和 ippgpass.conf相同。如果不是,它将提示您输入密码。