ltree является дополнением PostgreSQL и входит в пакет contrib, поэтому изначально оно не включено в стандартный пакет для *nix систем. Для установки запускаем в нужной базе данных .sql-файл /usr/local/share/postgresql/contrib/ltree.sql (C:\Program Files\PostgreSQL\8.4\share\contrib\ltree.sql для Windows).
Исходная документация находится по адресу: http://www.postgresql.org/docs/8.4/static/ltree.html. Я же рассмотрю отдельные моменты, которые не описаны в "родной" документации.
Создаем простую таблицу без излишеств:
В качестве элементов материализованного пути будет id.
Добавление в результат выборки id и mpath родителя:
Если в качестве элементов материализованного пути используются неуникальные значения, то родителя лучше искать по mpath:
Хотя можно и так:
правда при этом стоит не забывать, что "<@" верно и для текущего узла. Соответсвенно, убрав LIMIT мы получим всю родительскую ветку от текущего узла.
Все потомки:
Но в результат попадет и текущий узел, поэтому либо его исключать дополнительным условием, либо потомков выбирать так:
Прямые потомки:
Собственно, выражением .*{n} можно регулировать глубину уровней вложенности для выборки.
Как видно, с помощью ltree работать с материализованными путями одно удовольствие.