web-dev-qa-db-ja.com

psql-クエリとクエリの出力をファイルに書き込みます

Postgresql 9.3.1では、 psql コマンドを使用してクエリをインタラクティブに開発すると、最終的にクエリ結果がファイルに書き込まれることがあります。

boron.production=> \o /tmp/output
boron.production=> select 1;
boron.production=> \o
boron.production=> \q
$ cat /tmp/output
?column? 
----------
        1
(1 row)

これは正常に機能します。しかし、クエリ自体をクエリ結果と一緒にファイルに書き込むにはどうすればよいですか?

Psqlに--echo-queriesスイッチを与えてみました。

   -e, --echo-queries
       Copy all SQL commands sent to the server to standard output as well.
       This is equivalent to setting the variable ECHO to queries.

ただし、これは常にstdoutにエコーされ、\ oコマンドで指定したファイルにはエコーされません。

--echo-allスイッチも試しましたが、インタラクティブ入力をエコーし​​ていないようです。

コマンド編集を使用して、\qechoを前に付けてクエリを繰り返すことができます。それは機能しますが、面倒です。

クエリとクエリ出力の両方をファイルに書き込むようにインタラクティブなpsqlセッションを指示する方法はありますか?

10
Wayne Conrad

Stdoutをシェルから直接ファイルにリダイレクトしてみることができます(WinまたはLinuxが機能するはずです)

psql -U postgres -c "select 1 as result" -e nomedb >> hello.txt

これには、出力をインタラクティブに表示できないという欠点があります。それが問題である場合は、出力ファイルを別の端末でテール化するか、* nixの場合は、teeユーティリティを使用できます。

psql -U postgres -c "select 1 as result" -e nomedb | tee hello.txt

お役に立てれば!

ルカ

16
Luca Abbati

これは古い質問ですが、少なくとも9.3および現在のバージョンでは、ドキュメントまたは\?に示されているクエリバッファメタコマンドを使用してこれを行うことができます。 psqlコンソールから: https://www.postgresql.org/docs/9.3/static/app-psql.html

\w or \write filename
\w or \write |command

Outputs the current query buffer to the file filename or pipes it to the Shell command command.
6
Blockhead