1

我正在兜圈子,所以需要一些帮助。

我希望能够通过 bat 文件对作为计划任务的数据库运行 .sql。但是,当我手动运行 bat 文件时,系统会提示我输入密码。我输入密码然后被告知....

"psql: FATAL: password authentication failed for user "(my windows login)"
'-h' is not recognised as an internal or external command, 
operable program or batch file. 

此刻我的蝙蝠读...

@echo off
"D:\Program Files (x86)\PostgreSQL\9.1\bin\psql.exe"
-h localhost -U postgres -d database_name -f D:/scripts/SQL/test.sql
pause

首先,我需要添加什么 cmd 来填充密码请求

我在语句的其余部分做错了什么以使其加载.sql

谢谢

4

2 回答 2

2

通过将此行添加到您的配置文件 ( pg_hba.conf),您可以告诉 postgres 允许本地连接而无需身份验证

local      <database>  <user>  trust

http://www.postgresql.org/docs/9.1/static/auth-pg-hba-conf.html

于 2012-06-13T14:18:10.450 回答
1

所有需要进入批处理文件中的一行(看起来你有两行):

@echo off
"D:\Program Files (x86)\PostgreSQL\9.1\bin\psql.exe" -h localhost -U postgres -d database_name -f D:/scripts/SQL/test.sql
pause

要避免密码提示,请在调用 psql 之前设置环境变量 PGPASSWORD:

@echo off
setlocal
set PGPASSWORD=my_very_secret_password
"D:\Program Files (x86)\PostgreSQL\9.1\bin\psql.exe" -h localhost -U postgres -d database_name -f D:/scripts/SQL/test.sql
pause
endlocal

setlocal/endlocal 命令用于确保在执行批处理文件后清除变量。

为了避免在批处理文件中使用纯文本密码,您可以创建一个包含密码的 pgpass.conf 文件。有关详细信息,请参阅手册:http ://www.postgresql.org/docs/current/static/libpq-pgpass.html

于 2012-06-13T14:17:53.543 回答