Il terzo articolo sulle novità di PostgreSQL, dopo avere trattato SQL e amministrazione, è centrato sulle novità per gli sviluppatori di funzioni e procedure interne al database (comunemente dette stored procedure).
- Funzioni con un numero variabile di parametri (variadic parameter)
-
Le funzioni variadic, ovvero che accettano un numero variabile di parametri, sono adesso parte integrante di PostgreSQL grazie all'introduzione della parola chiave
VARIADICin fase di specifica del parametro di input della procedura/funzione.Per approfondimenti:
- Parametri con valori di default
-
È stata aggiunta la possibilità di aggiungere parametri con valori di default nelle stored procedure, in modo da gestire i casi in cui l'utente di una particolare funzione non fornisca uno o più argomenti alla chiamata. Questa funzionalità rende molto più semplice la manutenzione delle stored procedure e la migrazione delle stesse da applicazioni di database su sistemi come SQL server e Sybase.
Per approfondimenti:
- Funzioni PL/pgSQL che ritornano una tabella (
RETURNS TABLE) -
Una scorciatoia conforme allo standard SQL per rendere più leggibile la specifica di funzioni con numerosi parametri in uscita, tramite la parola chiave
RETURNS TABLE. La funzionalità è essenzialmente un alias diRETURNS SETOF, ma rende molto più veloce la scrittura di funzioni che si comportano come tabelle e che ritornano insiemi di righe.Per approfondimenti:
- Struttura di controllo
CASEin PL/pgSQL -
Grazie all'introduzione dell'istruzione di controllo switch
CASEin PL/pgSQL, che permette di eseguire codice basato sul confronto di un valore con una lista di condizione, vedremo progressivamente sparire l'utilizzo di blocchiIF .. ELSIF .. ELSIF .. ELSIF.Per approfondimenti:
- Potenziato il comando
RAISEin PL/pgSQL per il lancio di eccezioni -
Gli sviluppatori di stored procedure in PL/pgSQL ameranno molto le modifiche fatte da Pavel Stehule alla gestione delle eccezioni. Il comando
RAISEè stato potenziato:- è in grado di collegare all'eccezione sollevata dall'utente e ai messaggi di errore informazioni di dettaglio (opzione
DETAIL) e suggerimenti (opzioneHINT) - è finalmente in grado di associare un codice di errore
SQLSTATEall'eccezione (utilizzando sia codici predefiniti che non) - permette di associare nomi alle eccezioni utente
- è possibile ri-sollevare una eccezione al blocco try esterno tramite il comando
RAISEsenza parametri ( in gergo tecnico rethrow)
Senza dubbio gli sviluppatori di stored procedure in PL/pgSQL hanno adesso a disposizione un set di funzionalità in grado di dar loro maggior controllo alla gestione delle eccezioni e degli errori.
Per approfondimenti:
- è in grado di collegare all'eccezione sollevata dall'utente e ai messaggi di errore informazioni di dettaglio (opzione
- Supporto per parametri con
EXECUTEin PL/pgSQL -
La creazione di query dinamiche con
EXECUTEè stata semplificata notevolmente con l'introduzione dei parametri di esecuzione, da specificare con la clausolaUSING. Con questa modifica, non è più necessario creare query dinamiche concatenando stringhe e valori.Per approfondimenti:
- Supporto per
RETURN QUERY EXECUTEin PL/pgSQL -
È stata aggiunta la possibilità in PL/pgSQL di far ritornare alle funzioni il risultato di query dinamiche, tramite l'istruzione
RETURN QUERY EXECUTE.Per approfondimenti:
- Le funzioni che ritornano insiemi di record (SRF) possono essere richiamati all'interno di clausole
SELECT -
Questa funzionalità, finora utilizzabile soltanto nelle procedure in linguaggio SQL, è stata estesa ai linguaggi procedurali. Adesso è possibile eseguire query del tipo
select i, funzione_test(1, i) from generate_series(1,3) i, dovefunzione_testè una SRF scritta in un linguaggio procedurale come PL/pgSQL.Approfondimento: Waiting for 8.4 - pl/* srf functions in selects
- Trigger a livello di istruzione da scatenare in seguito a comando
TRUNCATE -
Ecco una funzionalità molto importante (soprattutto per i sistemi di replica basati su trigger) sviluppata dal nostro Simon Riggs che vede aggiungere la possibilità di specificare trigger a livello di istruzione (statement level trigger) da eseguire in seguito al verificarsi di un evento
TRUNCATEsu una tabella. Questa aggiunta è da considerarsi a tutti gli effetti una estensione di PostgreSQL, non contemplata dallo standard SQL.Per approfondimenti (in inglese):
Questo articolo è una traduzione da me riadattata del documento "What's new in 8.4" del PostgreSQL Global Development Group. Ringrazio inoltre Hubert Lubaczewski per la serie di articoli "Waiting for 8.4".

Lascia un commento