web-dev-qa-db-ja.com

.sqlファイルpostgresの画面への印刷

これは非常に簡単なことのように思えますが、どのようにすればよいのかわかりません。

テーブル、挿入/更新などを変更するアプリケーションのアップグレード用に作成している.sqlファイルがあります。

すべてのコマンドが終了した後、画面に書き込みたいです。

したがって、たとえば次のようなものがある場合:

insert into X...

次のようなものを見たい

テーブルXへの挿入を開始

テーブルXへの挿入が完了しました

これはPostgresで可能ですか?

30
El Guapo

大量のSQLを psql に供給する場合は、いくつかのオプションがあります。

--echo-allpsqlを実行できます:

-a
--echo-all
すべての入力行を読み取ったときに標準出力に出力します。これは、対話モードよりもスクリプト処理に役立ちます。これは、変数ECHOallに設定することと同等です。

それと他の「このタイプのすべてをエコーする」オプション( マニュアル を参照)は、おそらくノイズが多すぎます。手動で印刷したい場合は、\echoを使用します。

\echotext[...]
引数を標準出力に出力します。1つのスペースで区切られ、その後に改行が続きます。これは、スクリプトの出力に情報を散在させるのに役立ちます。

だからあなたは言うことができます:

\echo 'Starting to insert into table X'
-- big pile of inserts go here...
\echo 'Finished inserting into table X'
44
mu is too short

経由: https://stackoverflow.com/a/18828523/2014857

DO language plpgsql $$
BEGIN
  RAISE NOTICE 'hello, world!';
END
$$;

あなたが何をしているのかにもよりますが、私はたくさんの匿名コードブロックを実行することを心配しています。上記を関数として保存し、ログに記録する値を渡すことを検討できます。

6
FuriousFolder

おそらくもっと良い方法があります。ただし、Vanilla SQLを使用する必要がある場合は、これを試してください。

SELECT NULL AS "Starting to insert into table X";
-- big pile of inserts go here...
SELECT NULL AS "Finished inserting into table X";
5
shanemgrey