これは非常に簡単なことのように思えますが、どのようにすればよいのかわかりません。
テーブル、挿入/更新などを変更するアプリケーションのアップグレード用に作成している.sqlファイルがあります。
すべてのコマンドが終了した後、画面に書き込みたいです。
したがって、たとえば次のようなものがある場合:
insert into X...
次のようなものを見たい
テーブルXへの挿入を開始
テーブルXへの挿入が完了しました
これはPostgresで可能ですか?
大量のSQLを psql
に供給する場合は、いくつかのオプションがあります。
--echo-all
でpsql
を実行できます:
-a
--echo-all
すべての入力行を読み取ったときに標準出力に出力します。これは、対話モードよりもスクリプト処理に役立ちます。これは、変数ECHO
をall
に設定することと同等です。
それと他の「このタイプのすべてをエコーする」オプション( マニュアル を参照)は、おそらくノイズが多すぎます。手動で印刷したい場合は、\echo
を使用します。
\echo
text
[...]
引数を標準出力に出力します。1つのスペースで区切られ、その後に改行が続きます。これは、スクリプトの出力に情報を散在させるのに役立ちます。
だからあなたは言うことができます:
\echo 'Starting to insert into table X'
-- big pile of inserts go here...
\echo 'Finished inserting into table X'
経由: https://stackoverflow.com/a/18828523/2014857
DO language plpgsql $$
BEGIN
RAISE NOTICE 'hello, world!';
END
$$;
あなたが何をしているのかにもよりますが、私はたくさんの匿名コードブロックを実行することを心配しています。上記を関数として保存し、ログに記録する値を渡すことを検討できます。
おそらくもっと良い方法があります。ただし、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";