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セッションを指示する方法はありますか?
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
お役に立てれば!
ルカ
これは古い質問ですが、少なくとも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.