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提示符下注入密码,那也可以。
感谢。
答案 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
...确保myip
和pgpass.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
此外,您无需转义星号 \*
,只需输入 *
即可启用通配符匹配。