実現したいこと
PostgreSQL初心者です。よろしくお願いします。
Widnwosの batファイル内で、psqlからスクリプトファイルを実行しています。
スクリプトファイル内の RAISE INFO などで標準出力される内容を、ログファイルへ出力
したいです。
前提
データベースサーバー:
Windows2019 Server
PostgreSQL 14.7, compiled by Visual C++ build 1914, 64-bit
クライアント:
Windows11 Pro
Postgre14.7
詳細
Widnwosの batファイル内で、psqlからスクリプトファイルを実行しています。
スクリプトファイル内の RAISE INFO などで標準出力される内容を、ログファイルへ出力
したいです。
スクリプトファイルには、無名ブロックで DELETE や INSERTの処理を書いおり、
その中で、処理の開始と終わりに、
. RAISE INFO 'Start Process'
. RAISE NOTICE 'Error End';
. RAISE INFO 'Success End'
といった記述をしています。
コマンドプロンプトの画面には文言が出ているんですが、これをテキストファイルへ出力して
ログとしたいのですが、方法が分かりません。
①呼び出し元 (batファイル)
Windosのbatファイル
1set pgpassword=xx1234 2psql -h 192.168.123.123 -d my_db -U postgres -f myScript.sql > log.txt
②呼び出される myScript.sql の内容 (無名ブロック)
PL/pgSQL
1DO $$ 2DECLARE 3 4BEGIN 5 RAISE INFO '[%] %', TO_CHAR(CURRENT_TIMESTAMP, 'YYYY/MM/DD HH:MI:SS'), 'Start Process' ; 6 7 BEGIN 8 DELETE FROM myTable; 9 INSERT INTO myTable SELECT * FROM myTable2; 10 11 EXCEPTION 12 WHEN OTHERS THEN 13 RAISE NOTICE '[%] % (SQLSTATE=%, MESSAGE=%)' , 14 TO_CHAR(CURRENT_TIMESTAMP, 'YYYY/MM/DD HH:MI:SS') , 15 'Error End Process' , 16 SQLSTATE , 17 SQLERRM ; 18 RETURN; 19 END; 20 21 COMMIT; 22 RAISE INFO '[%] %', TO_CHAR(CURRENT_TIMESTAMP, 'YYYY/MM/DD HH:MI:SS'), 'Success End Process'; 23 24END; 25$$;
ログファイルには、日付と、処理が行われたのかどうか、成功か失敗か、ということが
読み取れれば良いので、RAISE INFO の内容を出力する事にこだわっていません。
どうぞよろしくお願いします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/08/26 04:08