2016-03-04 73 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