CodeGym /コース /SQL SELF /RAISE NOTICEでのログ出力

RAISE NOTICEでのログ出力

SQL SELF
レベル 52, レッスン 1
使用可能

ログ出力っていうのは、アプリやデータベースの動作中に大事なイベントや情報を書き残すことだよ。PL/pgSQLだと、特に複雑な関数を書いてて、他の関数を呼んだり、トリガーと連携したり、いろんなステップを踏むときにめっちゃ役立つ。なんでログが必要か、主な理由をいくつか挙げるね:

  1. コードのデバッグ:ログ出力があると、関数のどの段階で何が起きてるか分かりやすい。
  2. 問題の診断:もし関数が思った通りに動かないとき、ログを見ればどこでエラーが起きたか特定しやすい。
  3. 実行の分析:どのステップが(どんな順番で)実行されたか分かれば、パフォーマンスの最適化や改善ポイントも見つけやすい。
  4. メンテしやすい:例えば1年後に自分の関数を見返して「これ何やってんだっけ?」ってなっても、ログがあれば助かるよ(絶対なるから!)。

RAISE NOTICE ― ログ出力の基本

プログラマーなら、デバッグでprint()やconsole.log()を使ったことあるでしょ?RAISE NOTICEはPostgreSQL界のそれの兄貴分みたいなもん。関数実行中に情報メッセージを出してくれるコマンドだよ。これらのメッセージは、コンソールやターミナル、クエリを実行してるインターフェースで見える。

RAISE NOTICEのシンタックス

RAISE NOTICE '実行メッセージ';

でもこれはほんの始まり。メッセージに変数を含めて、もっと分かりやすくできる:

RAISE NOTICE '変数の現在値: %', my_variable;

ここで%はプレースホルダーで、my_variableは出力したい変数だよ。

複数の変数を出したいときは、こんな感じ:

RAISE NOTICE '値: % と %', var1, var2;

RAISE NOTICEの使い方例

1. 変数の値を出力する。 関数内で変数を宣言して、その値をRAISE NOTICEで出してみよう。

CREATE OR REPLACE FUNCTION debug_variable_example()
RETURNS VOID AS $$
DECLARE
    my_variable INTEGER := 42;
BEGIN
    RAISE NOTICE '変数my_variableの値: %', my_variable;
END;
$$ LANGUAGE plpgsql;

この関数を呼び出すと:

SELECT debug_variable_example();

結果はこんな感じになるよ:

NOTICE:  変数my_variableの値: 42

2. 実行ステップのログ出力。 例えば、いくつかのステップを実行する関数があるとする。各アクションの後にRAISE NOTICEを入れて、ちゃんと進んでるか確認できる。

CREATE OR REPLACE FUNCTION process_data()
RETURNS VOID AS $$
BEGIN
    RAISE NOTICE 'ステップ1: プロセス開始';

    -- ここで何かSQLコードを実行
    PERFORM pg_sleep(1); -- 操作のシミュレーション

    RAISE NOTICE 'ステップ2: プロセス継続中';

    -- さらにSQL
    PERFORM pg_sleep(1); -- 操作のシミュレーション

    RAISE NOTICE 'ステップ3: プロセス完了';
END;
$$ LANGUAGE plpgsql;

この関数を呼ぶと:

SELECT process_data();

こうなる:

NOTICE:  ステップ1: プロセス開始
NOTICE:  ステップ2: プロセス継続中
NOTICE:  ステップ3: プロセス完了

これで今どの段階か、いつでも分かるね。

実践的な使い方

計算処理のログ出力例を見てみよう。1からNまでの合計を計算して、その過程をログに出す関数を作るよ:

CREATE OR REPLACE FUNCTION sum_with_logging(n INTEGER)
RETURNS INTEGER AS $$
DECLARE
    total INTEGER := 0;
    i INTEGER;
BEGIN
    RAISE NOTICE 'n = % の計算開始', n;

    FOR i IN 1..n LOOP
        total := total + i;
        RAISE NOTICE 'ステップ%の合計: %', i, total;
    END LOOP;

    RAISE NOTICE '計算結果: %', total;

    RETURN total;
END;
$$ LANGUAGE plpgsql;

この関数を5で呼ぶと:

SELECT sum_with_logging(5);

こうなるよ:

NOTICE:  n = 5 の計算開始
NOTICE:  ステップ1の合計: 1
NOTICE:  ステップ2の合計: 3
NOTICE:  ステップ3の合計: 6
NOTICE:  ステップ4の合計: 10
NOTICE:  ステップ5の合計: 15
NOTICE:  計算結果: 15

ログ出力のちょっとしたコツ

  1. いらないログは消そう:関数が完成してデバッグも終わったら、余計なRAISE NOTICEは消して、ターミナルやユーザーインターフェースをスッキリさせよう。
  2. 意味のあるメッセージを書こう:「ステップ1」「ステップ2」だけじゃなくて、何のステップか分かるように書こう。
  3. 機密情報には注意:クレカ情報やパスワード、他の機密データは絶対にログに出さないこと!
2
タスク
SQL SELF, レベル 52, レッスン 1
ロック未解除
変数の値のログ出力
変数の値のログ出力
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION