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:

  1. è in grado di collegare all’eccezione sollevata dall’utente e ai messaggi di errore informazioni di dettaglio (opzione DETAIL) e suggerimenti (opzione HINT)
  2. è finalmente in grado di associare un codice di errore SQLSTATE all’eccezione (utilizzando sia codici predefiniti che non)
  3. permette di associare nomi alle eccezioni utente
  4. è 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

Leave A Reply