Postgres的pgpass窗口 - 不工作

问题描述:

DB:9.0的Postgres客户 :Windows 7的 服务器的Windows 2008,64位Postgres的pgpass窗口 - 不工作

我试图远程连接到一个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提示符下注入密码,那也可以。

感谢。

+2

'-h'是供主机连接的,你的是空的。 'pgpass'文件中的前四个字段应该是文字值或*,你是一个混合。 'pgpass'文件应该驻留在发出'pg_dump'命令的用户'AppData'文件夹中的客户端机器上 - 你的服务器上。 – 2010-12-17 15:59:15

+0

空-h是一个错字。我尝试了所有'*',没有'*'和两者之间的所有组合。我也尝试了一个本地的AppData文件,但同样的问题。 – Scott 2010-12-17 17:16:55

+0

.pgpass文件的权限是什么?它们只需要用户可读。 – 2010-12-17 21:17:18

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

.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 
+0

与Windows上的9.3一样,确切的事情发生在我身上。将主机更改为127.0.0.1修复了它。 – user1062589 2016-07-29 18:04:42

它为我的作品:

使用命令行

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> 

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

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

我有,我没能解决类似的问题 - 我不能让脚本识别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>>

我得到它具有以下工作:

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