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.

The article PostgreSQL ltree has been posted by Luca Ferrari on April 8, 2017