没有找到密码/找不到位置参数PostgreSQL - Powershell

时间:2015-08-11 14:13:15

标签: postgresql powershell

我正在尝试构建一个简单的脚本,将查询输出到powershell中的csv。但是,它会一直返回以下错误:

psql:fe_sendauth:没有提供密码

我尝试暴露密码,因为这将是一个安全的环境,但已经看到了使用pgpass的建议,但没有关于如何实施的真实解释。

Set-Location 'E:\Program Files\PostgreSQL\9.1\bin\';
SET 'PGPASSWORD = myPwd';
.\psql -U postgres -w MyDatabase 
copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';

1 个答案:

答案 0 :(得分:3)

SETSet-Variable的别名,但Powershell变量不是环境变量。要设置环境变量,您需要使用$env:范围。尝试:

$env:PGPASSWORD = 'myPwd';

有关环境变量的更多信息,另请参阅here

另外,我认为你不能像在PowerShell中那样在命令行上放置原始输入。我认为它会将事物视为单独的命令,但我可能是错的。

您可能还希望在调用psql时使用命令开关(-c)和PowerShell停止解析符号(--%)以防止PowerShell解析您的命令字符串:

.\psql --% -U postgres -w MyDatabase -c "copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';"

或者将命令设置为带有here-strings和变量的变量到psql:

$query = @'
copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';
'@
$query | .\psql -U postgres -w MyDatabase

或者大约十几种其他方式来调用可执行文件。