未提供密码/未找到位置参数PostgreSQL-Powershell

未提供密码/未找到位置参数PostgreSQL-Powershell,postgresql,powershell,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

我正在尝试构建一个简单的脚本,将查询输出到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 ',';

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

$env:PGPASSWORD = 'myPwd';
有关环境变量的更多信息,请参见

此外,我认为您不能像PowerShell中那样将原始输入放在命令行上。我想它会把事情当作单独的命令来处理,但我可能错了

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

.\psql --% -U postgres -w MyDatabase -c "copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';"
或者将命令设置为一个变量,其中包含字符串和管道,用于psql:

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

或者大约有十几种调用可执行文件的其他方法。

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

$env:PGPASSWORD = 'myPwd';
有关环境变量的更多信息,请参见

此外,我认为您不能像PowerShell中那样将原始输入放在命令行上。我想它会把事情当作单独的命令来处理,但我可能错了

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

.\psql --% -U postgres -w MyDatabase -c "copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';"
或者将命令设置为一个变量,其中包含字符串和管道,用于psql:

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

或者用十几种其他方法调用可执行文件。

谢谢您的回复。我不再得到密码提示。我将您的建议分成两行(数据库的psql声明和sql copy命令的另一行)。这是可行的,但让我的脚本挂起,打开数据库连接等待我输入sql命令。它实际上并没有像我需要的那样执行副本。我将答案标记为正确,但如果您能就最后一个问题提供一些反馈,我将不胜感激。使用引号运行将导致忽略-c参数的警告消息和忽略整个副本的另一条消息。尽管有警告消息,它还是登录到我的数据库,并再次挂起等待指示。MyDatabase=#u530529不确定。自从我使用psql已经有几年了,当时我正在使用Debian。您必须弄清楚您的命令是否错误,或者Powershell是否弄乱了它,或者Powershell是否只是没有正确调用psql,您需要改用Start Process。非常感谢您的指导。我可能不得不就这个新问题提出一个单独的问题,因为我正在努力回避它。祝你今天愉快我也有同样的问题,PS变量和环境之间的区别。谢谢,谢谢你的回复。我不再得到密码提示。我将您的建议分成两行(数据库的psql声明和sql copy命令的另一行)。这是可行的,但让我的脚本挂起,打开数据库连接等待我输入sql命令。它实际上并没有像我需要的那样执行副本。我将答案标记为正确,但如果您能就最后一个问题提供一些反馈,我将不胜感激。使用引号运行将导致忽略-c参数的警告消息和忽略整个副本的另一条消息。尽管有警告消息,它还是登录到我的数据库,并再次挂起等待指示。MyDatabase=#u530529不确定。自从我使用psql已经有几年了,当时我正在使用Debian。您必须弄清楚您的命令是否错误,或者Powershell是否弄乱了它,或者Powershell是否只是没有正确调用psql,您需要改用Start Process。非常感谢您的指导。我可能不得不就这个新问题提出一个单独的问题,因为我正在努力回避它。祝你今天愉快我也有同样的问题,PS变量和环境之间的区别。谢谢