Postgres pgpass windows - 不工作

时间:2010-12-17 15:37:25

标签: 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]

我也尝试分别用*[localhost|myip]替换每个[mydatabasename]

从我的客户端计算机上,我使用:

进行连接
pg_dump -h <myip> -U postgres -w [mydbname] > [mylocaldumpfile]

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

它回来了:

  

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

任何见解都表示赞赏。

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

感谢。

8 个答案:

答案 0 :(得分:6)

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

.pgpass

127.0.0.1:5432:db:dbuser:123

psql params

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

答案 1 :(得分:6)

它对我有用:

使用命令行

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>

答案 2 :(得分:3)

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

在批处理文件中:

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

答案 3 :(得分:3)

我已经使用以下内容:

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相同。如果不是,它会提示您输入密码。

答案 4 :(得分:0)

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

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

答案 5 :(得分:0)

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

答案 6 :(得分:0)

创建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

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

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

希望有帮助。

答案 7 :(得分:0)

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

否则保留第一行作为注释:

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

此外,您无需转义星号 \*,只需输入 * 即可启用通配符匹配。