Postgresql
PSQL 不執行 SQL 命令 - Powershell
我有一個簡單的腳本,它應該執行一個 select 語句並將其輸出到 CSV。我的問題是腳本連接到數據庫並掛起等待我的 sql 指令(在腳本上並且應該自動執行)。任何幫助將不勝感激。
Set-Location 'E:\Program Files\PostgreSQL\9.1\bin\'; $env:PGPASSWORD = 'mypwd'; .\psql --% -U postgres -w myDB .\psql --% -c "copy {'SELECT * FROM myTable';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';"
Set-Location 'E:\Program Files\PostgreSQL\9.1\bin\'; $env:PGPASSWORD = 'mypwd'; .\psql --% -U postgres -w myDB .\psql --% -c "copy {'SELECT * FROM myTable';} TO 'C:\Users\e\Desktop\test1.csv' CSV DELIMITER ',';"
你在這裡呼叫
psql
兩次。第一個進入互動模式,因為沒有提供標準輸入,沒有提供-f
文件名參數,也沒有-c
命令字元串。所以腳本永遠不會進入第二次
psql
呼叫。將參數放在一行。此外:
- 你
WITH (CSV, HEADER)
不想CSV DELIMITER ','
{'SELECT * FROM myTable';}
完全是胡說八道。只需使用COPY mytable TO ...
,或者如果您需要子查詢,請使用COPY (SELECT * FROM mytable) TO ...
- 如果您嘗試續行,請在行尾使用反引號 `。
- 除非您打算使用具有 PostgreSQL 伺服器文件權限的伺服器端路徑,否則您可能
\copy
不希望COPY
(我假設這會
--%
阻止 Powershell 在命令的其餘部分中查找 Powershell 標誌和選項;我以前沒見過)。我認為您正在尋找更多類似的東西:
Set-Location 'E:\Program Files\PostgreSQL\9.1\bin\'; $env:PGPASSWORD = 'mypwd'; .\psql --% -U postgres -w myDB -c "\copy (SELECT * FROM myTable) TO 'C:\Users\e\Desktop\test1.csv' WITH (FORMAT CSV, HEADER);"