2017-10-08 194 views
1

我在Windows服务器环境中安装了Postgresql数据库。我想没有要求输入密码才能计划使用Windows任务调度运行,每天晚上,所以我需要运行下面的命令作业:psql要求输入密码并且不能从pgpass.conf中读取

psql -U myUserName-d myDBName -c "select MyFunctionName()" 

当我在cmd shell中运行上面的查询,它问我密码。当我手动输入密码时,该功能正确运行。

所以我的解决方案是从pgpass.conf文件读取,所以不需要密码。

这里是我做了实现这一目标的事情:

我在我的%appdata%创建(AppData\Roaming\postgresql要准确)的目录中创建的文件pgpass.conf

下面是这个文件的内容:

localhost:5432:myDBName:myUserName:myPassword 

我也试图与价值127.0.0.1,而不是上面localhost

我,然后,添加一个环境变量(在用户变量对于管理员列表)称为PGPASSFILE并赋予它pgpass.conf位置。

;C:\Users\administrator\AppData\Roaming\postgresql\pgpass.conf 

最后,我停止并重新启动Windows服务上的Postgres服务并重新运行该命令。但它仍在要求输入密码。

如何让我的命令知道从哪里读取密码?

+0

在文件名起始处的';'看起来不对 –

+0

@a_horse_with_no_name我尝试了使用和不使用它。但它似乎没有什么区别。 – Disasterkid

+1

您是否尝试在cmd提示符下首先设置PGPASSFILE? –

回答

0

如果您不想设置PGPASSFILE环境变量,请将密码文件放在标准位置%APPDATA%\postgresql\pgpass.conf中,如the documentation所述。

+0

这就是我所做的。但它没有奏效。这就是为什么我在bash脚本中添加'SET PGPASSFILE = [PATH_TO_pgpass.conf]'的原因,但我希望它能从env vars自动读取。 – Disasterkid

+0

你的问题听起来像是在别的地方。当你打开一个DOS框并运行'TYPE%APPDATA%\ postgresql \ pgpass.conf'时,你会得到正确的文件吗? –