SET
là bí danh cho Set-Variable
, nhưng biến Powershell không phải là biến môi trường. Để đặt một biến môi trường, bạn cần sử dụng $env:
phạm vi. Hãy thử:
$env:PGPASSWORD = 'myPwd';
Xem thêm tại đây để biết thêm về các biến môi trường.
Ngoài ra, tôi không nghĩ rằng bạn có thể thoát khỏi việc đưa đầu vào thô vào dòng lệnh như vậy trong PowerShell. Tôi nghĩ rằng nó sẽ coi mọi thứ là các lệnh riêng biệt, nhưng tôi có thể đã nhầm.
Bạn cũng có thể muốn sử dụng công tắc lệnh (-c
) và biểu tượng dừng phân tích cú pháp PowerShell (--%
) khi bạn gọi psql để ngăn PowerShell phân tích cú pháp chuỗi lệnh của bạn:
.\psql --% -U postgres -w MyDatabase -c "copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';"
Hoặc đặt các lệnh thành một biến có chuỗi và ký tự ở đây thành psql:
$query = @'
copy {'SELECT * FROM table';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';
'@
$query | .\psql -U postgres -w MyDatabase
Hoặc khoảng một tá cách khác để gọi một tệp thực thi.