CodeGym /Kursy /SQL SELF /Logowanie z RAISE NOTICE

Logowanie z RAISE NOTICE

SQL SELF
Poziom 52 , Lekcja 1
Dostępny

Logowanie — to proces zapisywania ważnych zdarzeń i informacji o działaniu aplikacji albo bazy danych. W PL/pgSQL to szczególnie przydatne, kiedy tworzysz złożone funkcje, które wywołują inne funkcje, pracują z triggerami albo robią sporo kroków. Oto kilka kluczowych powodów, czemu logowanie jest potrzebne:

  1. Debugowanie kodu: logowanie pomaga ogarnąć, co się dzieje na każdym etapie działania funkcji.
  2. Diagnozowanie problemów: jeśli funkcja nie działa tak, jak się spodziewasz, logi pomogą znaleźć, gdzie dokładnie pojawił się błąd.
  3. Analiza wykonania: wiedząc, które kroki się wykonały (i w jakiej kolejności), możesz zoptymalizować wydajność albo znaleźć miejsca do poprawy.
  4. Łatwiejsze utrzymanie: wyobraź sobie, że za rok otwierasz swoją funkcję i nie masz pojęcia, jak ona działa (a tak będzie, serio). Logi ratują w takich sytuacjach.

RAISE NOTICE — podstawa logowania

Jeśli jesteś programistą i kiedyś używałeś print() albo console.log() do debugowania, to RAISE NOTICE to taki ich starszy brat w świecie PostgreSQL. To komenda, która wypisuje info podczas działania funkcji. Te komunikaty widać w konsoli, terminalu albo interfejsie, gdzie odpalasz swój query.

Składnia RAISE NOTICE

RAISE NOTICE 'Komunikat o wykonaniu';

Ale to dopiero początek. Możesz wrzucać zmienne do swoich komunikatów, żeby były bardziej konkretne:

RAISE NOTICE 'Aktualna wartość zmiennej: %', my_variable;

Tutaj % działa jako placeholder, a my_variable — to zmienna, której wartość chcesz wypisać.

Jeśli chcesz wypisać kilka zmiennych, możesz zrobić to tak:

RAISE NOTICE 'Wartości: % i %', var1, var2;

Przykłady użycia RAISE NOTICE

1. Wypisywanie wartości zmiennej. Zadeklarujemy zmienną w funkcji i wypiszemy jej wartość przez RAISE NOTICE.

CREATE OR REPLACE FUNCTION debug_variable_example()
RETURNS VOID AS $$
DECLARE
    my_variable INTEGER := 42;
BEGIN
    RAISE NOTICE 'Wartość zmiennej my_variable: %', my_variable;
END;
$$ LANGUAGE plpgsql;

Kiedy wywołasz tę funkcję:

SELECT debug_variable_example();

W wynikach zobaczysz coś takiego:

NOTICE:  Wartość zmiennej my_variable: 42

2. Logowanie kroków wykonania. Wyobraź sobie, że masz funkcję, która ma zrobić kilka kroków. Możesz dodać RAISE NOTICE po każdym działaniu, żeby mieć pewność, że wszystko idzie zgodnie z planem.

CREATE OR REPLACE FUNCTION process_data()
RETURNS VOID AS $$
BEGIN
    RAISE NOTICE 'Krok 1: start procesu';

    -- Tutaj leci jakiś SQL
    PERFORM pg_sleep(1); -- Symulacja operacji

    RAISE NOTICE 'Krok 2: proces trwa';

    -- Jeszcze trochę SQL
    PERFORM pg_sleep(1); -- Symulacja operacji

    RAISE NOTICE 'Krok 3: proces zakończony';
END;
$$ LANGUAGE plpgsql;

Wywołując funkcję:

SELECT process_data();

Dostaniesz:

NOTICE:  Krok 1: start procesu
NOTICE:  Krok 2: proces trwa
NOTICE:  Krok 3: proces zakończony

Teraz zawsze wiesz, na którym etapie jesteś.

Praktyczne zastosowanie

Sprawdźmy przykład logowania obliczeń. Stworzymy funkcję, która liczy sumę liczb od 1 do N i loguje proces:

CREATE OR REPLACE FUNCTION sum_with_logging(n INTEGER)
RETURNS INTEGER AS $$
DECLARE
    total INTEGER := 0;
    i INTEGER;
BEGIN
    RAISE NOTICE 'Start obliczeń dla n = %', n;

    FOR i IN 1..n LOOP
        total := total + i;
        RAISE NOTICE 'Suma na etapie %: %', i, total;
    END LOOP;

    RAISE NOTICE 'Wynik obliczeń: %', total;

    RETURN total;
END;
$$ LANGUAGE plpgsql;

Wywołując tę funkcję z parametrem 5:

SELECT sum_with_logging(5);

Dostaniesz:

NOTICE:  Start obliczeń dla n = 5
NOTICE:  Suma na etapie 1: 1
NOTICE:  Suma na etapie 2: 3
NOTICE:  Suma na etapie 3: 6
NOTICE:  Suma na etapie 4: 10
NOTICE:  Suma na etapie 5: 15
NOTICE:  Wynik obliczeń: 15

Przydatne tipy do logowania

  1. Pozbywaj się niepotrzebnych logów: kiedy twoja funkcja jest gotowa i przetestowana, usuń zbędne RAISE NOTICE, żeby nie zaśmiecać terminala albo interfejsu użytkownika.
  2. Używaj sensownych komunikatów: nie pisz po prostu "Krok 1", "Krok 2". Daj znać, co się dzieje w danym kroku.
  3. Uważaj na wrażliwe dane: nigdy nie wrzucaj do logów numerów kart, haseł ani innych poufnych informacji.
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION