2016-03-04 105 views
2

我需要在Inno Setup中創建Postgres中的表空間。設置由Inno Setup執行的Postgres(psql)進程的PGPASSWORD環境變量

我已經在命令行中運行以下命令:

SET PGPASSWORD=P0stgres 
"C:\Program Files\PostgreSQL\9.4\bin\psql.exe" -h localhost -p 5432 -U postgres -d postgres -c "CREATE TABLESPACE TABLETEST OWNER postgres LOCATION E'{app}\\PATHTEST\\Db'" 

我在Inno Setup的嘗試這樣做,但它沒有工作:

[Run] 
Filename: {sys}\cmd.exe; Parameters: "SET PGPASSWORD=P0stgres" 
Filename: {sys}\cmd.exe; Parameters: ""C:\Program Files\PostgreSQL\9.4\bin\psql.exe" -h localhost -p 5432 -U postgres -d postgres -c "CREATE TABLESPACE TABLETEST OWNER postgres LOCATION E'{app}\\PATHTEST\\Db'"" 

問候

回答

0

我能做到這一點的工作。是一個小錯誤。 正確的是:

[Run] 
Filename: {cmd}; Parameters: "/K SET PGPASSWORD=P0stgres&""C:\Program Files\PostgreSQL\9.4\bin\psql.exe"" -h localhost -p 5432 -U postgres -d postgres -c ""CREATE TABLESPACE TABLETEST OWNER postgres LOCATION '{app}\PATHTEST\Db'"" 
+0

請介意告訴我們,那個「小」的錯誤是什麼? '&'之前的空格? –

0

你有三個問題:

  • The cmd.exe needs /C switch之前的命令。
  • 環境變量不會神奇地導出到運行psql.exe的第二個cmd.exe實例。您必須在同一個cmd.exe實例中執行這兩個命令。其中一種方法是使用&「運算符」(另一種方法是使用包裝批處理文件來執行這兩個命令)。
  • 雙引號(特別是那些圍繞C:\...\psql.exeCREATE TABLESPACE ...have to be doubled
  • 本身並不是一個問題,但您應該更好地使用{cmd} constant而不是{sys}\cmd.exe
[Run] 
Filename: "{cmd}"; Parameters: "/C SET PGPASSWORD=P0stgres & ""C:\Program Files\PostgreSQL\9.4\bin\psql.exe"" -h localhost -p 5432 -U postgres -d postgres -c ""CREATE TABLESPACE TABLETEST OWNER postgres LOCATION E'{app}\\PATHTEST\\Db'""" 
+0

Martin, 不幸的是沒有工作。 – Robertopcn

+0

嘗試用'/ K'替換'/ C'。這樣控制檯窗口被保留下來,你會看到任何錯誤信息。 –

+0

嗨馬丁, 我試着按照你的建議做,但沒有奏效。 以其他方式嘗試在命令行中運行。 結果是:psql:FATAL:用戶「postgres」的密碼驗證失敗 我認爲這是因爲使用運算符& 今天我使用批處理文件,並且Db的位置必須是固定的。但我如何需要配置數據庫位置,我想使用: ..... LOCATION E'{app} \\ PATHTEST \\ Db' – Robertopcn