2012-06-13 101 views
1

我在圈子裏走,所以需要一些幫助。postgres,psql和一個bat文件

我希望能夠通過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

感謝

+0

這個問題是舊的本地連接,所以實際上另一個是「重複」,但兩者都有一個goog答案在這裏:http://stackoverflow.com/a/15593100/1801588 –

回答

1

中添加這一行到您的配置文件(pg_hba.conf),你可以告訴Postgres的允許無需驗證

local  <database> <user> trust 

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

+0

本地連接在Windows中不起作用(「本地」意味着通過unix域套接字進行連接) –

+0

oops,我沒有在Windows機器上呆過一段時間。並感謝您更新我的鏈接! – bpgergo

+0

本地只適用於UNIX域套接字! AFAIK它仍然不能通過TCP/IP工作 –

0

所有需要進入一行在批處理文件(好像你有兩條線):

@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 

爲了避免密碼提示,設置環境變量PGPASSWORD調用PSQL前:

@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

+0

當我作爲一個窗口運行批處理時收到以下錯誤消息管理員用戶「psql:FATAL:用戶密碼驗證失敗」postgres2。如果我運行我的正常Windows登錄下的批處理文件,然後bat/sql運行。有任何想法嗎? – geomiles