2012-03-29 36 views
36

如何隱藏psql輸出中的列名和行數?如何在Psql輸出中隱藏結果集裝飾

我通過PSQL運行的SQL查詢有:

psql --user=myuser -d mydb --output=result.txt -c "SELECT * FROM mytable;" 

,我期待像輸出:

1,abc 
2,def 
3,xyz 

而是我得到:

id,text 
------- 
1,abc 
2,def 
3,xyz 
(3 rows) 

中當然,在事實之後過濾頂部兩行和底部行並不是不可能的,但是有沒有辦法只用psql來完成呢?通過閱讀其手冊頁,我看到了控制字段分隔符的選項,但沒有隱藏無關輸出的選項。

回答

42

可以使用-t--tuples-only選項:

psql --user=myuser -d mydb --output=result.txt -t -c "SELECT * FROM mytable;"

編輯(超過一年後)補充:

你可能也想看看the COPY command 。我不再有方便與測試任何PostgreSQL的情況,但我認爲你可以沿着這些路線寫的東西:

psql --user=myuser -d mydb -c "COPY mytable TO 'result.txt' DELIMITER ','"

(除了result.txt將需要是絕對路徑)。 COPY命令也支持更智能的CSV格式;見its documentation

+16

或者,如果你想要的頭,但沒有行數頁腳,運行PSQL與--pset = 「頁腳= OFF」 – 2013-03-21 14:36:08

+1

'COPY'確實是一個有效的選擇,但該文件將最終在服務器上,而不是在psql運行的計算機上... – fvu 2015-09-01 14:23:04

+0

@fvu:好點。我通常在服務器上運行'psql' *,所以對我來說這不是問題。 。 。 – ruakh 2015-09-01 15:36:10

15

您也可以在psql中重定向輸出並使用相同的選項。使用\ o來設置輸出文件,\ t僅輸出元組(或者\pset來關閉rowcount「footer」)。

\o /home/flynn/queryout.txt 
\t on 
SELECT * FROM a_table; 
\t off 
\o 

另外,

\o /home/flynn/queryout.txt 
\pset footer off 
. . .