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提示符下注入密码,这也可以.
谢谢.
我已经解决了类似的问题(仅在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)
这个对我有用:
使用命令行
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)
创建 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、用户名& 密码
希望有帮助。
我有一个类似的问题,但我没能解决——我无法让脚本识别 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
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相同。如果不是,它将提示您输入密码。
| 归档时间: |
|
| 查看次数: |
24692 次 |
| 最近记录: |