SET
jest aliasem dla Set-Variable
, ale zmienne Powershell nie są zmiennymi środowiskowymi. Aby ustawić zmienną środowiskową, musisz użyć $env:
zakres. Wypróbuj:
$env:PGPASSWORD = 'myPwd';
Zobacz także tutaj aby dowiedzieć się więcej o zmiennych środowiskowych.
Poza tym nie sądzę, że można ujść na sucho, umieszczając surowe dane wejściowe w wierszu poleceń w taki sposób w PowerShell. Myślę, że potraktuje to jako osobne polecenia, ale mogę się mylić.
Możesz także użyć przełącznika poleceń (-c
) i symbol zatrzymania analizowania PowerShell (--%
) po wywołaniu psql, aby uniemożliwić PowerShellowi analizowanie ciągu poleceń:
.\psql --% -U postgres -w MyDatabase -c "copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';"
Lub ustaw polecenia na zmienną z here-strings i potoku to do psql:
$query = @'
copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';
'@
$query | .\psql -U postgres -w MyDatabase
Lub kilkanaście innych sposobów na wywołanie pliku wykonywalnego.