PL/pgSQLでプログラム開発しデバックする時など、メッセージを表示したくなると思います。
RAISEを使用すればメッセージを表示することができます。
尚、例外であるEXCEPTIONについては、次の記事「エラー時のメッセージ出力」に詳細を記します。
RAISEの構文について以下に記します。
尚、詳細なRAISEの説明については、「PostgreSQLのサイトを参照してください。」。
基本的な構文は以下のようになります。
RAISE [ level ] 'メッセージ'
変数などを表示したい場合は、%を使用します。
RAISE [ level ] 'メッセージ %', foo
複数の変数の値を表示したい場合は、以下ようになります。
RAISE [ level ] 'メッセージ foo=% bar=%', foo,bar
上記の構文の[level]ですが、以下のレベルを指定することができます。
levelは省略可能であり、省略した場合は、EXCEPTIONになります。
以下のようにEXCEPTIONを除いたサンプルを以下に記します。
CREATE OR REPLACE FUNCTION raise_sample() RETURNS void AS $$ DECLARE foo text := 'foo'; bar int := 123; BEGIN RAISE DEBUG 'DEBUG RAISE MESSAGE'; RAISE LOG 'LOG RAISE MESSAGE'; RAISE INFO 'INFO RAISE MESSAGE %', foo; RAISE NOTICE 'NOTICE RAISE MESSAGE %,%', foo, bar; RAISE WARNING 'WARNING RAISE MESSAGE'; END $$ LANGUAGE plpgsql ;
levelにDEBUG, LOG, INFO, NOTICE, WARNINGを指定してメッセージを出力するサンプルです。
以下のコマンドで上記のFUNCTIONを登録しました。
みなさんの環境にあったオプションで登録してください。
$ psql -U sakura -f raise_sample.sql sakuradb CREATE FUNCTION
実行結果は以下の通りになります。
sakuradb=# select raise_sample(); INFO: INFO RAISE MESSAGE foo NOTICE: NOTICE RAISE MESSAGE foo,123 WARNING: WARNING RAISE MESSAGE raise_sample -------------- (1 row)
上記の通りターミナルにINFO, NOTICE, WARNINGが表示されているのが確認できますが、
DEBUG, LOGが出力されていません。
この出力は、一部ログに出力されています。
$ cat /var/log/postgresql/postgresql-9.3-main.log | grep 'RAISE MESSAGE' 2016-10-23 21:09:26 JST LOG: LOG RAISE MESSAGE 2016-10-23 21:09:26 JST WARNING: WARNING RAISE MESSAGE
LOGとWARNINGが出力されているのが確認できます。
(ディストリビューションやインストール方法によって出力されるログファイルのディレクトリが異なりますので、みなさんの環境にあった値に読み替えてください。)
上記の出力をみても、DEBUGが表示されていません。
これは、postgresql.confのlog_min_messagesにdebug1を指定すればログに出力されます。
変更前
#log_min_messages = warning # values in order of decreasing detail:
変更後
log_min_messages = debug1 # values in order of decreasing detail:
ログ確認 $ cat /var/log/postgresql/postgresql-9.3-main.log | grep 'RAISE MESSAGE'
<省略> 2016-10-23 21:19:07 JST DEBUG: DEBUG RAISE MESSAGE 2016-10-23 21:19:07 JST LOG: LOG RAISE MESSAGE 2016-10-23 21:19:07 JST INFO: INFO RAISE MESSAGE foo 2016-10-23 21:19:07 JST NOTICE: NOTICE RAISE MESSAGE foo,123 2016-10-23 21:19:07 JST WARNING: WARNING RAISE MESSAGE
出力するレベルをdebug1にしたのですべて出力されているのが確認できます。
尚、出力レベルについてですが、client_min_messages, log_min_messages = warningなどがありますので
PostgreSQLサイトで詳細を確認してみてください。
以上、RAISEによるメッセージ出力でした。