sabato 8 aprile 2017

PostgreSQL ltree

Da un thread su una delle mailing list ufficiali ho appreso di un tipo di dato a me sconosciuto: ltree.
Un ltree rappresenta un label tree, quello che nei linguaggi di programmazione è un meccanismo di properties. In sostanza
si definiscono delle etichette, ordinate gerarchicamente in base ad un separatore (il carattere .) e a queste si associa un valore.
Esistono poi funzioni apposite di utilità per la navigazione e la ricerca nell'albero delle etichette.


Vediamo un esempio pratico: supponiamo di voler catalogare in un albero alcune informazioni basilari riguardo la nostra associazioni
(dati assolutamente casuali e a puro scopo didattico!).


CREATE TABLE 
itpug( tipologia ltree, counter integer );

Ora si supponga di voler trovare il dettaglio dei soci, magari la loro somma partendo dalla foglia dell'albero:


SELECT sum( counter )  
FROM itpug  
WHERE tipologia @> 'itpug.soci';
 sum
----
  50
(1 row)

Supponiamo di voler trovare tutte le informazioni relativi al web (si noti l'uso della tilde):



SELECT *  
FROM itpug  
WHERE tipologia ~ '*.web.*';
         tipologia         | counter
---------------------------+---------
 itpug.web.siti            |       3
 itpug.web.ssl.certificati |       1
(2 rows)

Insomma, ltree si presenta come estensione sicuramente interessante, anche se forse un po' sorpassata dall'uso di altri formati quali json e jsonb.

Nessun commento: