このエントリーをはてなブックマークに追加


[smile]PL/pgSQL入門ページに戻る


メッセージを表示させる・RAISE

PL/pgSQLでプログラム開発しデバックする時など、メッセージを表示したくなると思います。
RAISEを使用すればメッセージを表示することができます。
尚、例外であるEXCEPTIONについては、次の記事「エラー時のメッセージ出力」に詳細を記します。

RAISEの構文

RAISEの構文について以下に記します。
尚、詳細なRAISEの説明については、「PostgreSQLのサイトを参照してください。」。
基本的な構文は以下のようになります。

RAISE [ level ] 'メッセージ'

変数などを表示したい場合は、%を使用します。

RAISE [ level ] 'メッセージ %', foo

複数の変数の値を表示したい場合は、以下ようになります。

RAISE [ level ] 'メッセージ foo=% bar=%', foo,bar

levelについて

上記の構文の[level]ですが、以下のレベルを指定することができます。
levelは省略可能であり、省略した場合は、EXCEPTIONになります。

RAISEのサンプルプログラム

以下のように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によるメッセージ出力でした。


[smile]PL/pgSQL入門ページに戻る


添付ファイル: fileraise_sample.sql 1040件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-10-23 (日) 21:27:45