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:
- Debug del codice: il logging ti aiuta a capire cosa succede esattamente in ogni fase dell'esecuzione della funzione.
- Diagnosi dei problemi: se una funzione non va come ti aspetti, i log ti aiutano a capire dove si è incastrato tutto.
- Analisi dell'esecuzione: sapere quali passi sono stati fatti (e in che ordine) ti permette di ottimizzare le performance o trovare punti da migliorare.
- 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
- Togli i log inutili: quando la tua funzione è pronta e testata, elimina i messaggi
RAISE NOTICEche non servono più, così non riempi la console o l'interfaccia di roba inutile. - Scrivi messaggi chiari: non scrivere solo "Passo 1", "Passo 2". Fai capire cosa sta succedendo davvero in ogni passo.
- Occhio alle info sensibili: mai mettere nei log dati di carte di credito, password o altre informazioni riservate.
GO TO FULL VERSION