Come sviluppatori e amministratori di database pensiamo che PostgreSQL non debba essere visto come un semplice contenitore di dati. Amiamo portare la logica dentro al database e PostgreSQL offre molti linguaggi procedurali per farlo.
A volte scrivere le funzioni in SQL è molto utile. SQL è più semplice rispetto ai linguaggi procedurali, ha meno richieste in termini di memoria e risulta molto più veloce.
Noi di 2ndQuadrant Italia utilizziamo un approccio agile e collaborativo alla programmazione, questo implica che diverse persone all’interno del team debbano mettere le mani sullo stesso codice, anche a settimane di distanza. Per questo sentiamo la necessità di scrivere codice che sia chiaro e leggibile.
In PostgreSQL 9.2 la scrittura di funzioni in SQL è stata resa più facile aggiungendo la possibilità di usare parametri denominati (in inglese named parameter).
Prima della 9.2 era necessario utilizzare $1 per riferirsi al primo parametro della funzione, $2 per il secondo, e così via.
Questo ha sempre creato grossi problemi in termini di manutenibilità del codice.
Un esempio di utilizzo degli argomenti denominati è descritto di seguito, tramite la definizione di una funzione SQL che controlla il valore di md5sum
rispetto a due file, restituendo TRUE
in caso sia uguale, FALSE
altrimenti.
Tenete presente che i file devono risiedere sul server e il percorso dei file deve essere relativo alla directory PGDATA
di PostgreSQL (per motivi di sicurezza).
BEGIN;
CREATE OR REPLACE FUNCTION check_md5( _file1 TEXT, _file2 TEXT )
RETURNS BOOLEAN LANGUAGE SQL immutable AS
$BODY$
SELECT CASE WHEN md5(pg_read_binary_file( _file1 )) = md5(pg_read_binary_file( _file2 ))
THEN TRUE ELSE FALSE END;
$BODY$;
SELECT check_md5('../img/a.jpg','../img/b.jpg');
SELECT check_md5('../img/a.jpg','../img/c.jpg');
SELECT check_md5(NULL,'../img/c.jpg');
ROLLBACK;
Questa nuova funzionalità renderà molto più leggibile e manutenibile il codice, e per noi non può che essere un’ottima notizia!
This Post Has 0 Comments