CodeGym /Corsi /SQL SELF /Introduzione a PL/pgSQL

Introduzione a PL/pgSQL

SQL SELF
Livello 49 , Lezione 0
Disponibile

PostgreSQL non "parla" solo SQL! Ecco a te: PL/pgSQL (Procedural Language/PostgreSQL Structured Query Language), un linguaggio di programmazione procedurale integrato in PostgreSQL. È stato creato per semplificare l'esecuzione di operazioni complesse usando query SQL e strutture di controllo come condizioni (IF, CASE) e cicli (LOOP, FOR, WHILE).

PL/pgSQL e SQL — sono come una linea di montaggio automatizzata e un semplice "strumento manuale" tipo un martello. Come il martello, SQL è uno strumento affidabile. Solo che per ogni colpo devi alzare la mano e farlo manualmente. Invece PL/pgSQL è come una linea di montaggio automatica: imposti una volta cosa e come deve essere fatto, e poi tutto va da solo — esegue i comandi, memorizza, controlla, se qualcosa va storto continua tranquillo. Perché piantare ogni chiodo a mano, se puoi solo guardare come tutto si fa da solo? Non è un sogno?

Confronto tra PL/pgSQL e le normali query SQL

Vediamo in cosa PL/pgSQL è diverso dalle semplici query SQL.

SQL va benissimo quando devi fare una cosa specifica: tipo selezionare tutti gli studenti da una tabella o aggiungere una nuova riga. Ma appena inizi a imbatterti in logiche tipo "se succede questo, allora fai quello" o devi ripetere le stesse azioni, SQL comincia a fare fatica.

Per esempio, immagina che devi:

  1. Controllare se esiste già una riga per uno studente nella tabella.
  2. Se la riga esiste — aggiornare i dati.
  3. Se la riga non esiste — aggiungere una nuova riga.

Con il semplice SQL dovresti scrivere più query e gestire il risultato lato client. Con PL/pgSQL puoi mettere tutto in una procedura che gira direttamente nel database.

PL/pgSQL dà il meglio di sé nei progetti più complessi. Ti permette di:

  • salvare risultati intermedi in variabili;
  • gestire gli errori così il database non "crasha" quando succede qualcosa di strano;
  • usare cicli e condizioni per eseguire algoritmi complessi.

Dove si usa PL/pgSQL

PL/pgSQL si usa spesso in questi scenari:

  1. Automatizzazione dei task. Per esempio, la creazione automatica di righe nel log (log) ogni volta che aggiorni i dati.

  2. Business logic. Hai una regola: ogni studente con più di 5 assenze deve essere segnato automaticamente come "non attivo". Perché non mettere questa regola in una funzione PL/pgSQL?

  3. Analisi e report. Invece di spostare i dati avanti e indietro tra database e applicazione client, puoi aggregarli direttamente lato server.

  4. Trigger. PL/pgSQL viene usato per scrivere trigger che eseguono azioni automatiche quando inserisci, aggiorni o cancelli dati.

Esempio di utilizzo di PL/pgSQL

Ecco un esempio di funzione che prende due numeri, li somma e restituisce il risultato:

CREATE FUNCTION add_numbers(a INT, b INT) RETURNS INT AS $$
BEGIN
    RETURN a + b;
END;
$$ LANGUAGE plpgsql;

Spiegazione:

  • CREATE FUNCTION add_numbers(a INT, b INT) — stiamo creando una funzione chiamata add_numbers che prende due argomenti di tipo INT (numero intero).
  • RETURNS INT — indica che la funzione restituisce un intero.
  • BEGIN ... END — questo è il blocco principale dove gira la logica della funzione.
  • RETURN a + b; — il risultato della somma viene restituito.

Per chiamare questa funzione, usa una normale query SQL:

SELECT add_numbers(10, 20);

Risultato: 30.

Trappole e limiti

PL/pgSQL è uno strumento potente, ma va usato con attenzione:

  • Performance: funzioni troppo complesse possono rallentare il database. Testa e ottimizza sempre.
  • Testing: gli errori nelle funzioni possono non vedersi finché non le chiami. Non dimenticare i test!
  • Leggibilità: funzioni e procedure grosse con logica complicata possono essere difficili da capire. Scrivi codice che capirai anche tra un mese.

Ora che hai già un'idea di cosa sia PL/pgSQL, parliamo ancora della sua sintassi e delle sue funzioni base. Impareremo a creare blocchi di codice, dichiarare variabili e lavorare con i tipi di dati nelle prossime lezioni. Avanti con la programmazione lato database!

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION