我正在尝试构建一个简单的脚本,将查询输出到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 ',';
答案 0 :(得分:3)
SET
是Set-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
或者大约十几种其他方式来调用可执行文件。