PostgreSQL: psql で実行した SQL の結果をファイルに書き出す方法


psql を使って 実行した PostgreSQLSQL 結果を ファイルに書き出す方法をいくつか紹介します。

環境

次の環境で試しました。

  • psql 9.6.4
  • PostgreSQL server 9.3.1

psql 実行中

psql 実行時 に結果を書き出す先を設定する方法です。

結果を一度だけファイルに出力する

私はこれをよく使います。

まずは実行したい SQL を書いて実行します。 その次に \g /tmp/output.txt のように \g と出力先ファイルを記述して Enter を押します。 指定したファイルに結果が書き込まれます。

\g のみを実行すると、 SQL が再実行され、 結果がコンソール上に出力されます。

結果出力先をファイル継続的に書き込む

これをやると、結果がどんどんファイルに追記されます。

\o /tmp/output.txt のように出力先ファイルを指定します。 この場合だと、 標準出力には表示されなくなり、ファイルのみに継続的に書き込まれます。

標準出力にもファイルにも書き出したい場合は \o | cat > /tmp/output.txt 2>&1 と書きます。

\o のみ入力して Enter を押すともとに戻ります。

コピー

COPY または \copy を使ってファイルに出力できます。 この方法を使えば CSV や TSV として出力できます。

2行目の例では最後にセミコロンがありません。 \ で始まるメタコマンドは改行がコマンドの最後となります。

各種オプションは PostgreSQL のドキュメントを参照してください。

シェル実行中

コマンドで SQL を実行してファイルにリダイレクトさせることもできます。

オプション -c に渡されたスクリプトを実行しますので、 その中に上で書いた COPY を使った文を入れてもいいです。