Postgresql

PSQL 不執行 SQL 命令 - Powershell

  • November 6, 2021

我有一個簡單的腳本,它應該執行一個 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);"

引用自:https://dba.stackexchange.com/questions/110699