PostgreSQL 8.4: Le novità nelle stored procedure
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 ( xml:lang=”en”>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
VARIADIC
in 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 di RETURNS 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
CASE
in PL/pgSQL
- Grazie all’introduzione dell’istruzione di controllo xml:lang=”en”>switch
CASE
in PL/pgSQL, che permette di eseguire codice basato sul confronto di un valore con una lista di condizione, vedremo progressivamente sparire l’utilizzo di blocchi IF .. ELSIF .. ELSIF .. ELSIF
.
Per approfondimenti:
- Potenziato il comando
RAISE
in 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 (opzione HINT
)
- è finalmente in grado di associare un codice di errore
SQLSTATE
all’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
RAISE
senza 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:
- Supporto per parametri con
EXECUTE
in PL/pgSQL
- La creazione di query dinamiche con
EXECUTE
è stata semplificata notevolmente con l’introduzione dei parametri di esecuzione, da specificare con la clausola USING
. Con questa modifica, non è più necessario creare query dinamiche concatenando stringhe e valori.
Per approfondimenti:
- Supporto per
RETURN QUERY EXECUTE
in 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
, dove funzione_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
TRUNCATE
su 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“.
This Post Has 0 Comments