JavaRush /Курси /SQL SELF /Логування з RAISE NOTICE

Логування з RAISE NOTICE

SQL SELF
Рівень 52 , Лекція 1
Відкрита

Логування — це процес запису важливих подій і інформації про роботу застосунку або бази даних. У PL/pgSQL це особливо корисно, коли ти створюєш складні функції, які викликають інші функції, працюють з тригерами або виконують купу кроків. Ось кілька ключових причин, чому логування необхідне:

  1. Дебаг коду: логування допомагає зрозуміти, що саме відбувається на кожному етапі виконання функції.
  2. Діагностика проблем: якщо функція не працює так, як ти очікував, логи допоможуть знайти, де саме з'явилась помилка.
  3. Аналіз виконання: знаючи, які кроки виконались (і в якому порядку), ти зможеш оптимізувати продуктивність або знайти моменти для покращення.
  4. Простота супроводу: уяви, що через рік ти відкриваєш свою функцію і не розумієш, як вона працює (а таке буде, повір). Логи рятують у таких ситуаціях.

RAISE NOTICE — основа логування

Якщо ти програміст і колись використовував print() або console.log() для дебагу, то RAISE NOTICE можна назвати їхнім старшим братом у світі PostgreSQL. Це команда, яка виводить інформаційні повідомлення під час виконання функції. Ці повідомлення видно в консолі, терміналі або інтерфейсі, де виконується твій запит.

Синтаксис RAISE NOTICE

RAISE NOTICE 'Повідомлення про виконання';

Але це тільки початок. Ти можеш вставляти змінні у свої повідомлення, щоб зробити їх інформативнішими:

RAISE NOTICE 'Поточне значення змінної: %', my_variable;

Тут % виступає як placeholder, а 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. Будь обережний з чутливою інформацією: ніколи не включай у логи дані кредитних карток, паролі чи іншу конфіденційну інформацію.
Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ