Skip to content

jhannah/talk-pg-ltree

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

talk-pg-ltree

Hierarchical data using PostgreSQL ltree extension... SoEasy!

From scratch

$ psql -c "create database tree"
$ psql tree < schema.sql
$ psql tree
tree=# \copy tree(id, parent_id, name) from 'in.csv' delimiter ',' CSV;

That's it. You can now select * to see all the columns. Notice that the path column has been automagically propogated with the path to each row in integers, via the triggers and stored procedure in the schema.sql file.

Then witness the materialized path magic like so:

SELECT t.id, t.path, t.name, array_to_string(array_agg(a.name ORDER BY a.path), ' > ') AS fullname
FROM tree AS t INNER JOIN tree AS a
  ON (a.path @> t.path)
GROUP BY t.id, t.path, t.name
ORDER BY fullname;

You can now use all the ltree operators and functions on the path column. For example, maybe you only want to see the tree with "Other Mobile Device" in the middle:

SELECT t.id, t.path, t.name, array_to_string(array_agg(a.name ORDER BY a.path), ' > ') AS fullname
FROM tree AS t INNER JOIN tree AS a
  ON (a.path @> t.path)
WHERE t.path ~ '*.75141.*'
GROUP BY t.id, t.path, t.name
ORDER BY fullname;

Or maybe you want the tree terminating in "Linux Laptop/Desktop":

Hmmm... not working yet...: wassup with that?

SELECT t.id, t.path, t.name, array_to_string(array_agg(a.name ORDER BY a.path), ' > ') AS fullname
FROM tree AS t INNER JOIN tree AS a
  ON (a.path @> t.path)
WHERE t.path @> '300938'
GROUP BY t.id, t.path, t.name
ORDER BY fullname;

About

PostgreSQL extension ltree

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published