2014-02-27 83 views
5

嘗試將查詢的輸出轉儲到自動作業中的CSV文件中,並遇到列中包含逗號分隔符的字段的問題。隨着這個特定網絡的性質,我不得不跳過一些環節來完成任務,並且很有可能我錯過了一些非常明顯的東西。在帶有雙引號的postgres中輸出爲CSV

簡而言之,我從使用PLINK在另一個盒子上通過SSH連接運行遠程psql命令的客戶機啓動我的腳本。那psql命令在第三臺機器上打了一個Postgres服務器(我不能直接從客戶機連接到數據庫,因此它們之間有額外的步驟)。

如果我手動SSH從客戶端到服務器1,連接到Postgres框,並使用\ copy ...與CSV標頭,創建的文件是完美的,並且任何包含逗號的字段將自動被雙引號。但是,如果我嘗試在單個命令中發出\ copy(或copy)命令,則輸出不包含那些雙引號,所以我最終在這種情況下將字段中的逗號解釋爲分隔符後面一個。

換句話說,這有必要的雙引號:

  1. SSH從客戶到Server1。
  2. psql -Uuser -h server2數據庫
  3. \ copy(select ...)to'〜/ myfile.csv'with CSV header;

但並不:

  1. SSH從客戶到Server1
  2. psql -Uuser -h server2 database -c "\copy (select ...) to '~/myfile.csv' with CSV header;"
+2

你嘗試:'-c「\複印件(選擇...)到 '〜/ myfile.csv' WITH(CSV格式,頁眉TRUE,FORCE_QUOTE *);'? – Houari

+0

我沒有,看起來這正是我所需要的。謝謝! –

回答

12

使用FORCE_QUOTE

這裏是如何做到:

psql -U user -h server2 database -c "\copy (select ...) to '~/myfile.csv' WITH (FORMAT CSV, HEADER TRUE, FORCE_QUOTE *);" 

COPY命令documentation

相關問題