CodeGym /Corsi /SQL SELF /Logging con RAISE NOTICE

Logging con RAISE NOTICE

SQL SELF
Livello 52, Lezione 1
Disponibile

Il logging è il processo di registrazione di eventi importanti e informazioni sul funzionamento di un'applicazione o di un database. In PL/pgSQL è particolarmente utile quando crei funzioni complesse che chiamano altre funzioni, lavorano con trigger o fanno un sacco di passi diversi. Ecco alcune ragioni chiave per cui il logging è fondamentale:

  1. Debug del codice: il logging ti aiuta a capire cosa succede esattamente in ogni fase dell'esecuzione della funzione.
  2. Diagnosi dei problemi: se una funzione non va come ti aspetti, i log ti aiutano a capire dove si è incastrato tutto.
  3. Analisi dell'esecuzione: sapere quali passi sono stati fatti (e in che ordine) ti permette di ottimizzare le performance o trovare punti da migliorare.
  4. Facilità di manutenzione: immagina di riaprire la tua funzione tra un anno e non capire più nulla di come funziona (fidati, succede). I log ti salvano in queste situazioni.

RAISE NOTICE — la base del logging

Se sei uno sviluppatore e hai mai usato print() o console.log() per il debug, allora RAISE NOTICE è tipo il loro fratello maggiore nel mondo PostgreSQL. È un comando che stampa messaggi informativi durante l'esecuzione di una funzione. Questi messaggi li vedi nella console, nel terminale o nell'interfaccia dove lanci la query.

Sintassi di RAISE NOTICE

RAISE NOTICE 'Messaggio di esecuzione';

Ma questo è solo l'inizio. Puoi includere variabili nei tuoi messaggi per renderli più utili:

RAISE NOTICE 'Valore attuale della variabile: %', my_variable;

Qui % fa da placeholder, e my_variable è la variabile di cui vuoi stampare il valore.

Se vuoi stampare più variabili, puoi farlo così:

RAISE NOTICE 'Valori: % e %', var1, var2;

Esempi di utilizzo di RAISE NOTICE

1. Stampa del valore di una variabile. Dichiariamo una variabile in una funzione e stampiamo il suo valore con RAISE NOTICE.

CREATE OR REPLACE FUNCTION debug_variable_example()
RETURNS VOID AS $$
DECLARE
    my_variable INTEGER := 42;
BEGIN
    RAISE NOTICE 'Valore della variabile my_variable: %', my_variable;
END;
$$ LANGUAGE plpgsql;

Quando chiami questa funzione:

SELECT debug_variable_example();

Nei risultati vedrai qualcosa tipo:

NOTICE:  Valore della variabile my_variable: 42

2. Logging dei passi di esecuzione. Immagina di avere una funzione che deve fare diversi passi. Puoi aggiungere RAISE NOTICE dopo ogni azione per essere sicuro che tutto stia andando come previsto.

CREATE OR REPLACE FUNCTION process_data()
RETURNS VOID AS $$
BEGIN
    RAISE NOTICE 'Passo 1: inizio processo';

    -- Qui esegui qualche codice SQL
    PERFORM pg_sleep(1); -- Simulazione di un'operazione

    RAISE NOTICE 'Passo 2: il processo continua';

    -- Ancora un po' di SQL
    PERFORM pg_sleep(1); -- Simulazione di un'operazione

    RAISE NOTICE 'Passo 3: processo terminato';
END;
$$ LANGUAGE plpgsql;

Chiamando la funzione:

SELECT process_data();

Otterrai:

NOTICE:  Passo 1: inizio processo
NOTICE:  Passo 2: il processo continua
NOTICE:  Passo 3: processo terminato

Così sai sempre a che punto sei nell'esecuzione.

Applicazione pratica

Dai, vediamo un esempio di logging nei calcoli. Creiamo una funzione che calcola la somma dei numeri da 1 a N e logga il processo:

CREATE OR REPLACE FUNCTION sum_with_logging(n INTEGER)
RETURNS INTEGER AS $$
DECLARE
    total INTEGER := 0;
    i INTEGER;
BEGIN
    RAISE NOTICE 'Inizio calcoli per n = %', n;

    FOR i IN 1..n LOOP
        total := total + i;
        RAISE NOTICE 'Somma al passo %: %', i, total;
    END LOOP;

    RAISE NOTICE 'Risultato dei calcoli: %', total;

    RETURN total;
END;
$$ LANGUAGE plpgsql;

Chiamando questa funzione con il parametro 5:

SELECT sum_with_logging(5);

Otterrai:

NOTICE:  Inizio calcoli per n = 5
NOTICE:  Somma al passo 1: 1
NOTICE:  Somma al passo 2: 3
NOTICE:  Somma al passo 3: 6
NOTICE:  Somma al passo 4: 10
NOTICE:  Somma al passo 5: 15
NOTICE:  Risultato dei calcoli: 15

Consigli utili per il logging

  1. Togli i log inutili: quando la tua funzione è pronta e testata, elimina i messaggi RAISE NOTICE che non servono più, così non riempi la console o l'interfaccia di roba inutile.
  2. Scrivi messaggi chiari: non scrivere solo "Passo 1", "Passo 2". Fai capire cosa sta succedendo davvero in ogni passo.
  3. Occhio alle info sensibili: mai mettere nei log dati di carte di credito, password o altre informazioni riservate.
2
Compito
SQL SELF, livello 52, lezione 1
Bloccato
Log dei valori di una variabile
Log dei valori di una variabile
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION