CodeGym /课程 /SQL SELF /用RAISE NOTICE做日志

用RAISE NOTICE做日志

SQL SELF
第 52 级, 课程 1
可用

日志其实就是把应用或者数据库运行时的重要事件和信息记录下来。在PL/pgSQL里,这个功能特别有用,尤其是你写的函数很复杂、会调用别的函数、用到触发器或者有很多步骤的时候。下面是为啥日志很重要的几个关键理由:

  1. 调试代码:日志能帮你搞清楚每一步函数到底发生了啥。
  2. 排查问题:如果函数没按你想的那样跑,日志能帮你定位到底哪儿出错了。
  3. 分析执行过程:知道哪些步骤执行了(以及顺序),你就能优化性能或者发现可以改进的地方。
  4. 维护更轻松:想象一下,一年后你再打开自己的函数,完全看不懂自己写的啥(真的会这样,相信我)。这时候日志就能救你一命。

RAISE NOTICE —— 日志的基础

如果你写过代码,肯定用过 print() 或 console.log() 来调试吧,那 RAISE NOTICE 就是PostgreSQL世界里的“老大哥”。它能在函数执行时输出信息消息。这些消息会显示在控制台、终端或者你执行SQL的界面里。

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