2012-03-29 15 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) 

もちろん、上の2行と下の行をフィルタリングすることは不可能ではありませんが、psqlだけで実行する方法はありますか?そのマンページを読んで、私はフィールドの区切り文字を制御するオプションを見ていますが、無関係な出力を隠すことはありません。あなたはまた、the COPY commandをチェックアウトする場合があります

を:追加するには、編集(一年後より)

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

答えて

42

あなたは-t--tuples-onlyオプションを使用することができます。私はもはやでテストする便利な任意のPostgreSQLのインスタンスを持っていないが、私はあなたがこれらの線に沿って何か書くことができると思う:

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

を(そのresult.txt除いて、絶対パスである必要があります)。 COPYコマンドは、よりインテリジェントなCSV形式もサポートしています。 its documentationを参照してください。

+16

、 "フッター=オフ" –

+1

'COPY'は確かにすることができ有効な選択肢ですが、ファイルはサーバ上にあり、psqlが実行されているマシン上にはありません。 – fvu

+0

@fvu:良い点。私は通常、サーバー上で 'psql' *を実行していました。 。 。 – ruakh

15

psqlから出力をリダイレクトして、同じオプションを使用することもできます。出力ファイルを設定するには\ oを使い、タプルだけを出力するには\ tを使います(または行数 "フッター"だけをオフにするには\pset)。あなたは--pset =とpsqlを実行して、ヘッダーではなく、行数のフッターを、したい場合は代わり

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

、代わり

\o /home/flynn/queryout.txt 
\pset footer off 
. . . 
関連する問題