目次
psql を使って 実行した PostgreSQL の SQL 結果を ファイルに書き出す方法をいくつか紹介します。
環境
次の環境で試しました。
- psql 9.6.4
- PostgreSQL server 9.3.1
psql 実行中
psql 実行時 に結果を書き出す先を設定する方法です。
結果を一度だけファイルに出力する
私はこれをよく使います。
まずは実行したい SQL を書いて実行します。 その次に g /tmp/output.txt
のように g
と出力先ファイルを記述して Enter を押します。 指定したファイルに結果が書き込まれます。
g
のみを実行すると、 SQL が再実行され、 結果がコンソール上に出力されます。
1 2 |
SELECT 1; g /tmp/output.txt |
結果出力先をファイル継続的に書き込む
これをやると、結果がどんどんファイルに追記されます。
o /tmp/output.txt
のように出力先ファイルを指定します。 この場合だと、 標準出力には表示されなくなり、ファイルのみに継続的に書き込まれます。
1 2 |
o /tmp/output.txt SELECT 1; |
標準出力にもファイルにも書き出したい場合は o | cat > /tmp/output.txt 2>&1
と書きます。
1 2 |
o | cat > /tmp/output.txt 2>&1 SELECT 1; |
o
のみ入力して Enter を押すともとに戻ります。
コピー
COPY
または copy
を使ってファイルに出力できます。 この方法を使えば CSV や TSV として出力できます。
例
1 2 |
Copy (Select * From something) To '/tmp/test.csv' With CSV DELIMITER ','; copy (Select * From something) To '/tmp/output.csv' With CSV |
2行目の例では最後にセミコロンがありません。 で始まるメタコマンドは改行がコマンドの最後となります。
各種オプションは PostgreSQL のドキュメントを参照してください。
シェル実行中
コマンドで SQL を実行してファイルにリダイレクトさせることもできます。
1 |
psql -c 'SELECT * FROM something;' |
オプション -c
に渡されたスクリプトを実行しますので、 その中に上で書いた COPY
を使った文を入れてもいいです。